文章目录  1.引出迭代器模式   2.迭代器模式解决院系结构展示问题 1.基本介绍 2.原理类图 3.类图 4.代码实现 1.Department.java 存储信息的对象 2.College.java 被迭代的类型接口 3.ComputerCollege.java 被迭代的具体实现类,存储数据并将其在创建迭代器的时候传进去 4.ComputerCollegeIterator.java 被实现的具体类的迭代器 5.InfoCollege.java 被迭代的具体类型 6.InfoColleageIterator.java 具体的迭代器 7.OutputImpl.java 统一输出信息的类 8.Client.java 客户端 5.注意事项和细节 3.迭代器模式在ArrayList的应用 观察者模式 1.引出观察者模式 1.天气预报项目需求 2.普通方案 3.普通方案问题分析 2.观察者模式解决天气预报 1.原理分析 2.类图 3.代码实现 1.Observer.java 观察者接口,可以更新自己的信息 2.CurrentConditions.java 具体的观察者 3.Subject.java 信息发布者的接口 4.WeatherData.java 具体的信息发布者,一旦更新信息就会更新观察者的信息 5.Client.java 6.结果 3.观察者模式在JDK的Observable类中的使用   
 
 
 
 
 
 
package  com. sun ; 
public  class  Department  { private  String  name; private  String  desc; public  Department ( String  name,  String  desc)  { this . name =  name; this . desc =  desc; } public  String  getName ( )  { return  name; } public  void  setName ( String  name)  { this . name =  name; } public  String  getDesc ( )  { return  desc; } public  void  setDesc ( String  desc)  { this . desc =  desc; } 
} 
package  com. sun ; import  java. util.  Iterator ; 
public  interface  College  { String  getName ( ) ; void  addDepartment ( String  name,  String  desc) ; Iterator  createIterator ( ) ; } 
package  com. sun ; import  java. util.  Iterator ; 
public  class  ComputerCollege  implements  College  { Department [ ]  departments; int  numOfDepartment =  0 ; public  ComputerCollege ( )  { departments =  new  Department [ 3 ] ; addDepartment ( "java" ,  "java" ) ; addDepartment ( "python" ,  "python" ) ; addDepartment ( "go" ,  "go" ) ; } @Override public  String  getName ( )  { return  "计算机学院" ; } @Override public  void  addDepartment ( String  name,  String  desc)  { Department  department =  new  Department ( name,  desc) ; departments[ numOfDepartment++ ]  =  department; } @Override public  Iterator  createIterator ( )  { return  new  ComputerCollegeIterator ( departments) ; } 
} 
package  com. sun ; import  java. util.  Iterator ; 
public  class  ComputerCollegeIterator  implements  Iterator  { Department [ ]  departments; int  position =  0 ; public  ComputerCollegeIterator ( Department [ ]  departments)  { this . departments =  departments; } @Override public  boolean  hasNext ( )  { if ( position >=  departments. length ||  departments[ position]  ==  null )  { return  false ; } return  true ; } @Override public  Object  next ( )  { Department  department =  departments[ position] ; position +=  1 ; return  department; } @Override public  void  remove ( )  { Iterator . super . remove ( ) ; } 
} 
package  com. sun ; import  java. util.  Iterator ; 
import  java. util.  LinkedList ; 
import  java. util.  List ; 
public  class  InfoCollege  implements  College { List < Department > ; public  InfoCollege ( )  { departmentList =  new  LinkedList < > ( ) ; addDepartment ( "信息安全" ,  "信息安全" ) ; addDepartment ( "网络安全" ,  "网络安全" ) ; addDepartment ( "服务器安全" ,  "服务器安全" ) ; } @Override public  String  getName ( )  { return  "信息工程学院" ; } @Override public  void  addDepartment ( String  name,  String  desc)  { Department  department =  new  Department ( name,  desc) ; departmentList. add ( department) ; } @Override public  Iterator  createIterator ( )  { return  new  InfoColleageIterator ( departmentList) ; } 
} 
package  com. sun ; import  java. util.  Iterator ; 
import  java. util.  List ; 
public  class  InfoColleageIterator  implements  Iterator  { List < Department > ; int  index =  - 1 ; public  InfoColleageIterator ( List < Department > )  { this . departments =  departments; } @Override public  boolean  hasNext ( )  { if  ( index >=  departments. size ( )  -  1 )  { return  false ; } index +=  1 ; return  true ; } @Override public  Object  next ( )  { return  departments. get ( index) ; } @Override public  void  remove ( )  { Iterator . super . remove ( ) ; } 
} 
package  com. sun ; import  java. util.  Iterator ; 
import  java. util.  List ; 
public  class  OutputImpl  { List < College > ; public  OutputImpl ( List < College > )  { this . collegeList =  collegeList; } public  void  printCollege ( )  { for  ( College  college :  collegeList)  { System . out. println ( "====="  +  college. getName ( )  +  "=====" ) ; Iterator  iterator =  college. createIterator ( ) ; printDepartment ( iterator) ; } } public  void  printDepartment ( Iterator  iterator)  { while  ( iterator. hasNext ( ) )  { Department  next =  ( Department )  iterator. next ( ) ; System . out. println ( next. getName ( ) ) ; } } } 
package  com. sun ; import  java. util.  LinkedList ; 
import  java. util.  List ; 
public  class  Client  { public  static  void  main ( String [ ]  args)  { List < College > =  new  LinkedList < > ( ) ; collegeList. add ( new  ComputerCollege ( ) ) ; collegeList. add ( new  InfoCollege ( ) ) ; OutputImpl  output =  new  OutputImpl ( collegeList) ; output. printCollege ( ) ; } 
} 
 
 
 
 
 
 
 
 
 
package  com. sun ; 
public  interface  Observer  { void  update ( float  temperature,  float  pressure,  float  humidity) ; } 
package  com. sun ; 
public  class  CurrentConditions  implements  Observer { private  float  temperature; private  float  pressure; private  float  humidity; @Override public  void  update ( float  temperature,  float  pressure,  float  humidity)  { this . temperature =  temperature; this . humidity =  humidity; this . pressure =  pressure; display ( ) ; } public  void  display ( )  { System . out. println ( "Today's temperature: "  +  temperature) ; System . out. println ( "Today's pressure: "  +  pressure) ; System . out. println ( "Today's humidity: "  +  humidity) ; } } 
package  com. sun ; 
public  interface  Subject  { void  registerObserver ( Observer  o) ; void  removeObserver ( Observer  o) ; void  notifyObservers ( ) ; } 
package  com. sun ; import  java. util.  ArrayList ; 
import  java. util.  Iterator ; 
import  java. util.  List ; 
public  class  WeatherData  implements  Subject { private  float  temperature; private  float  pressure; private  float  humidity; private  List < Observer > ; public  WeatherData ( )  { observerList =  new  ArrayList < > ( ) ; } public  void  setData ( float  temperature,  float  pressure,  float  humidity)  { this . humidity =  humidity; this . pressure =  pressure; this . temperature =  temperature; changeData ( ) ; } public  void  changeData ( )  { notifyObservers ( ) ; } @Override public  void  registerObserver ( Observer  o)  { observerList. add ( o) ; } @Override public  void  removeObserver ( Observer  o)  { observerList. remove ( o) ; } @Override public  void  notifyObservers ( )  { Iterator < Observer > =  observerList. iterator ( ) ; while  ( iterator. hasNext ( ) )  { Observer  next =  iterator. next ( ) ; next. update ( temperature,  pressure,  humidity) ; } } } 
package  com. sun ; 
public  class  Client  { public  static  void  main ( String [ ]  args)  { WeatherData  weatherData =  new  WeatherData ( ) ; CurrentConditions  currentConditions =  new  CurrentConditions ( ) ; weatherData. registerObserver ( currentConditions) ; weatherData. setData ( 200 ,  200 ,  200 ) ; weatherData. setData ( 100 ,  100 ,  100 ) ; } }