每天一设计模式之观察者模式

来源:互联网 发布:2017淘宝红包口令多少 编辑:程序博客网 时间:2024/05/16 12:24
<script type="text/javascript"><!--google_ad_client = "pub-9528830580198364";/* 大矩形336x280, 创建于 09-5-28 */google_ad_slot = "4731086345";google_ad_width = 336;google_ad_height = 280;//--></script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

每天一设计模式之观察者模式

观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化的时候会通知所有观察者对象,使他们能够自动更新自己.

观察者模式结构图:

观察者模式结构图

 

样例代码:

代码来源:大话设计模式

代码故事,老板回来了,大家不要玩了,做事

主题:

package com.test;

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

    public void detach(Observer observer);

    public void notifyIt();

    public String getState();

}

 

玩股票的

package com.test;

public class StockObserver extends Observer {

    public StockObserver(String name, Subject sub) {
        super(name, sub);
    }

    @Override
    public void update() {
        System.out.println(sub.getState() + name + "关闭股票行情,继续工作!");

    }

}

 

观察者:

package com.test;

public abstract class Observer {

    protected String name;
    protected Subject sub;

    public Observer(String name, Subject sub) {
        this.name = name;
        this.sub = sub;
    }

    public abstract void update();
}

 

老板:

package com.test;

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

public class Boss implements Subject {

    private List observers = new ArrayList();
    private String state;

    public void setState(String state) {
        this.state = state;
    }

    public void attach(Observer observer) {
        observers.add(observer);

    }

    public void detach(Observer observer) {
        observers.remove(observer);

    }

    public void notifyIt() {
        for (Observer ob : observers) {
            ob.update();
        }

    }

    public String getState() {
        // TODO Auto-generated method stub
        return state;
    }

}

 

测试:

package com.test;

public class Test {
    public static void main(String[] args) {
        Boss wo = new Boss();
        StockObserver tongshi1 = new StockObserver("飞", wo);
        StockObserver tongshi2 = new StockObserver("勇", wo);

        wo.attach(tongshi1);
        wo.attach(tongshi2);

        wo.detach(tongshi1);

        wo.setState("我回来了");

        wo.notifyIt();
    }
}

原创粉丝点击