首页 > 其他 > 详细

观察者模式

时间:2017-06-18 19:44:20      阅读:310      评论:0      收藏:0      [点我收藏+]

我对这个模式的理解:

被观察者在自己的内部注册观察者,当需要通知观察者的时候,就通过使用所持有的观察者自己的方法来传递消息,代码如下

Main方法

package com.test.design.observer;

public class Main {
    public static void main(String[] args) {
        Activity activity = new ConcreteActivity();
        Observer observer1 = new ConcreteObserver();
        Observer observer2 = new ConcreteObserver();
        Observer observer3 = new ConcreteObserver();
        
        activity.addObserver(observer1);
        activity.addObserver(observer2);
        activity.addObserver(observer3);
        
        activity.notifyObserver("perimeter has been breached");
    }
}

被观察者接口

package com.test.design.observer;

//被观察者
public interface Activity {
    public void addObserver(Observer observer);
    public void removeObserver(Observer observer);
    public void notifyObserver(String str);
}

观察者接口

package com.test.design.observer;

//抽象观察者角色
public interface Observer {
    public void update(String str);
}

被观察者

package com.test.design.observer;

import java.util.ArrayList;
import java.util.List;

public class ConcreteActivity implements Activity{

    //存放观察者
    private List<Observer> list = new ArrayList<>();
    
    @Override
    public void addObserver(Observer observer) {
        // TODO Auto-generated method stub
        list.add(observer);
    }

    @Override
    public void removeObserver(Observer observer) {
        // TODO Auto-generated method stub
        list.remove(observer);
    }

    @Override
    public void notifyObserver(String str) {
        // TODO Auto-generated method stub
        for (Observer observer : list) {
            observer.update(str);
        }
    }

}

观察者

package com.test.design.observer;

/**
 * 具体的观察者
 * @author Ash
 *
 */
public class ConcreteObserver implements Observer{

    @Override
    public void update(String str) {
        // TODO Auto-generated method stub
        System.out.println("str");
    }
}

 

观察者模式

原文:http://www.cnblogs.com/heben/p/7045031.html

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