首页 > 其他 > 详细

观察者设计模式

时间:2020-07-11 22:25:49      阅读:44      评论:0      收藏:0      [点我收藏+]

观察者模式中有观察者Observer和被观察者Subject。Subject里有一个arrayList之类的数据结构存储着这些观察者的实例对象,当Subject有变化时,就会通知这些Observer

public interface Observer {
    public void update();
}

 

//被观察者
abstract public class Subject {
 
    private List<Observer> observerList = new ArrayList<Observer>();
 
    public void attachObserver(Observer observer) {
        observerList.add(observer);
    }
 
    public void detachObserver(Observer observer){
        observerList.remove(observer);
    }
 
    public void notifyObservers(){
        for (Observer observer: observerList){
            observer.update();
        }
    }

 

//怪物
public class Monster implements Observer {
 
    @Override
    public void update() {
        if(inRange()){
            System.out.println("怪物 对主角攻击!");
        }
    }
 
    private boolean inRange(){
        //判断主角是否在自己的影响范围内,这里忽略细节,直接返回true
        return true;
    }
}
 
//陷阱
public class Trap implements Observer {
 
    @Override
    public void update() {
        if(inRange()){
            System.out.println("陷阱 困住主角!");
        }
    }
 
    private boolean inRange(){
        //判断主角是否在自己的影响范围内,这里忽略细节,直接返回true
        return true;
    }
}
 
//宝物
public class Treasure implements Observer {
 
    @Override
    public void update() {
        if(inRange()){
            System.out.println("宝物 为主角加血!");
        }
    }
 
    private boolean inRange(){
        //判断主角是否在自己的影响范围内,这里忽略细节,直接返回true
        return true;
    }
}

 

public class Hero extends Subject{
    void move(){
        System.out.println("主角向前移动");
        notifyObservers();
    }
}

 

public class Client {
    public static void main(String[] args) {
        //初始化对象
        Hero hero = new Hero();
        Monster monster new Monster();
        Trap trap new Trap();
        Treasure treasure new Treasure();
        //注册观察者
        hero.attachObserver(monster);
        hero.attachObserver(trap);
        hero.attachObserver(treasure);
        //移动事件
        hero.move();
    }
}

 

观察者设计模式

原文:https://www.cnblogs.com/lzh66/p/13285543.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!