9.观察者模式

package 观察者模式;
import java.util.*;//包含List接口和集合类ArrayList

//定义了一种一对多的依赖关系,让多个观察对象(公司员工)同时监听一个主题对象(秘书),
//主题对象状态发生变化时,会通知所有的观察者,使它们能够更新自己。
abstract class Subject{//抽象通知者   
   
    protected List <Observer> observers=new ArrayList<Observer>();//观察者列表

    protected  String subjectState;//通知者的状态
   
    public void Add(Observer observer){//增加被通知的观察者
  observers.add(observer);
 }
    public void Remove(Observer observer){//移除被通知的观察者
  observers.remove(observer);
 }

    public void setState(String subjectState){
      this.subjectState=subjectState;
     } 
 
    public String getState(){
    return subjectState;
   }

    public abstract void Notify();//通知
   
}

class ConcreteSubjectA extends Subject{//具体通知者
  
 public void Notify(){

  System.out.println("前台通知:");

  for(Observer observer:observers){//新循环,遍历集合列表中的所有元素
   observer.Update();

  }
 }

}


class ConcreteSubjectB extends Subject{//具体通知者
   
 public void Notify(){

  System.out.println("秘书通知:");

  for(Observer observer:observers){//新循环,遍历集合列表中的所有元素
   observer.Update();

  }
 }

}


abstract class Observer{//抽象观察者
 protected String name;//观察者姓名
 protected Subject sub;//抽象通知者对象变量
 protected String observerState;//观察者的状态
 
 public Observer(String name,Subject sub){
   this.name=name;this.sub=sub;
  }
 public abstract void Update();//抽象更新方法
}

class ConcreteObserverA extends Observer{//具体观察者
    public ConcreteObserverA(String name,Subject sub){
  super(name,sub);
 }
 public void Update(){//通知者状态发生变化时,收到通知后,自动更新自己
  observerState=sub.getState();
  System.out.println(name+"!"+observerState+",不要看NBA了,要开始工作了");
 }

}

class ConcreteObserverB extends Observer{//具体观察者
    public ConcreteObserverB(String name,Subject sub){
   super(name,sub);
  }
 public void Update(){//通知者状态发生变化时,收到通知后,自动更新自己
  observerState=sub.getState();
  System.out.println(name+"!"+observerState+",不要玩股票了,要开始工作了");
 }
}

public class Test {
 public static void main(String[] args){
 
    Subject sub=new ConcreteSubjectA();//创建一个通知者
 
 Observer observer1=new ConcreteObserverA("小王",sub);//观察者小王
 Observer observer2=new ConcreteObserverB("老李",sub);//观察者老李
 
 //加入观察者列表
 sub.Add(observer1);
 sub.Add(observer2);
    sub.Remove(observer2);
 
 //通知者的状态发生变化
 sub.setState("老板回来了");
 
    //通知观察者
 sub.Notify();
 
 
 
 }
 
}

你可能感兴趣的:(工作,String,list,Class,import)