码迷,mamicode.com
首页 > 其他好文 > 详细

[Design Pattern] Observer Pattern 简单案例

时间:2016-05-22 00:39:35      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:

Observer Pattern,即观察者模式,当存在一对多关系,例如一个对象一有变动,就要自动通知被依赖的全部对象得场景,属于行为类的设计模式。

 

下面是一个观察者模式的简单案例。

Observer 定义观察者的接口,定义需要观察的对象,已经被通知的接口。BinaryObserver, OctalObserver, HexaObserver 各自实现了 Observer 接口。

Subject 是被观察的对象,记录了观察该对象的观察者列表,自身有变动,即可通知观察者列表中的各个观察者。

技术分享

代码实现

Observer 接口,定义了被通知的方法,定义了观察的对象。

public abstract class Observer {

    protected Subject subject;
    
    public abstract void update(int value);
}

BinaryObserver, OctalObserver, HexaObserver 实现了 Observer 接口,实现了具体的被通知方法。

public class BinaryObserver extends Observer {

    public BinaryObserver(Subject subject){
        this.subject = subject;
        subject.attach(this);
    }

    @Override
    public void update(int value) {
        System.out.println("BinaryObserver " + Integer.toString(value, 2));
    }    
}

 

public class OctalObserver extends Observer {

    public OctalObserver(Subject subject){
        this.subject = subject;
        subject.attach(this);
    }
    
    @Override
    public void update(int value) {
        System.out.println("octal Observer update " + Integer.toString(value, 8));
    }
}

 

public class HexaObserver extends Observer {

    public HexaObserver(Subject subject){
        this.subject = subject;
        subject.attach(this);
    }
    
    @Override
    public void update(int value) {
        System.out.println("hexa Observer update " + Integer.toString(value, 16));
    }
}

Subject 是被观察的对象,内含一个观察本对象的观察者名单

public class Subject {
    
    private List<Observer> observers = new LinkedList<>();
    
    private int state;

    public int getState() {
        return state;
    }

    public void setState(int state) {
        this.state = state;
        this.notifyAllObservers();
    }
    
    public void attach(Observer observer){
        observers.add(observer);
    }
    
    public void notifyAllObservers(){
        for (Observer observer : observers){
            observer.update(state);
        }
    }
}

演示代码,每次更新 Subject 对象的属性,Subject 都会通知到观察它的观察者

public class ObserverPatternDemo {

    public static void main(){
        
        Subject subject = new Subject();
        
        new BinaryObserver(subject);
        new OctalObserver(subject);
        new HexaObserver(subject);

        subject.setState(17);
        subject.setState(9);    
    }
}

 

参考资料

Design Patterns - Observer Pattern, TutorlsPoint

 

[Design Pattern] Observer Pattern 简单案例

标签:

原文地址:http://www.cnblogs.com/TonyYPZhang/p/5515938.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!