观察者设计模式

来源:互联网 发布:白熊事务所装软件 编辑:程序博客网 时间:2024/06/16 08:23

      观察者设计模式是通知一组对象自己的变化,而这一组对象又是变化的。如在学校外有很多叫外卖的,外卖的菜谱是变化的,学生订餐是变化的,如果菜谱变化了,就通知点餐的学生。

      看下面的例子,你就会明白:

      public interface IFood {

void adduser(IObserver user);

void removeuser(IObserver user);

void tel();

}

public class GuangdongFoodImp implements IFood{

private List<IObserver> list=null;

private String name;


public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public GuangdongFoodImp(){

if(list==null){

list=new ArrayList<IObserver>();

}

}

@Override

public void adduser(IObserver user) {

list.add(user);

}

@Override

public void removeuser(IObserver user) {

list.remove(user);

}

@Override

public void tel() {

for(int i=0;i<list.size();i++){

list.get(i).update();

}

}

}

public interface IObserver {
    void update();
}

public class StudentImp implements IObserver{

private String name;

private GuangdongFoodImp food;


public StudentImp(GuangdongFoodImp food){

this.food=food;

}

public GuangdongFoodImp getFood() {

return food;

}

public void setFood(GuangdongFoodImp food) {

this.food = food;

}



public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public void update() {

name=food.getName();

System.out.println("我收到:"+name);

}

}

public class Client {

public static void main(String args[]){

GuangdongFoodImp food=new GuangdongFoodImp();

StudentImp stus1=new StudentImp(food);

StudentImp stus2=new StudentImp(food);

StudentImp stus3=new StudentImp(food);


food.adduser(stus1);

food.adduser(stus2);

food.adduser(stus3);


food.setName("小炸肉");

food.tel();

food.setName("水煮鱼");

food.tel();

}

}


原创粉丝点击