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

设计模式-16观察者模式

时间:2016-08-21 06:25:05      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:

一 观察者模式

当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。

主要解决: 一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。

关键代码: 在类里有一个 ArrayList 存放观察者们。

使用场景:一个女孩有三个男朋友,女孩的喜怒哀乐,男朋友们都知道。:(

类图:

技术分享

 二 实现代码

1 创建抽象观察者

Observer.java

package com.test.observer;

public abstract class Observer {
 
}

2 具体观察者

ConcreteObserver.java

package com.test.observer;

public class ConcreteObserver extends Observer {
    public void update(Object object) {
        System.out.println("观察者更新自己,得到参数=" + object);
    }
    
}

3 创建接口主题

Subject.java

package com.test.observer;

public interface Subject {
    public void attach(Observer observer);

    public void detach(Observer observer);

    public void notifyObservers();
}

4 创建具体主题

ConcreteSubject.java

package com.test.observer;

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

public class ConcreteSubject implements Subject {

    List<Observer> list = new ArrayList<Observer>();

    public void attach(Observer observer) {
        this.list.add(observer);
    }

    public void detach(Observer observer) {
        this.list.remove(observer);
    }

    public void notifyObservers() {
        for (Observer observer : list) {
            observer.update("通知观察者!");
        }
    }

    public void runObservers() {
        this.notifyObservers();
    }
}

5 运行测试类

RunObserverDemo.java

package com.test.observer;

public class RunObserverDemo {

    public static void main(String[] args) {
        ConcreteSubject subject = new ConcreteSubject();
            
        ConcreteObserver o1 = new ConcreteObserver();
        ConcreteObserver o2 = new ConcreteObserver();
        ConcreteObserver o3 = new ConcreteObserver();
        
        subject.attach(o1);
        subject.attach(o2);
        subject.attach(o3);
        
        subject.runObservers();
        
        System.out.println("----------------");
        subject.detach(o1);
        subject.runObservers();
        
    }

}

 

设计模式-16观察者模式

标签:

原文地址:http://www.cnblogs.com/wangshuo1/p/pattern_16.html

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