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

《大话设计模式》——读后感 (6)老板回来了,我不知道?——观察者模式之理论实例(1)

时间:2017-06-21 14:14:56      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:code   []   style   模式   通知   watch   方法   服务业   ack   

技术分享

技术分享

单独看UML类图,有没有发现观察者类图和工厂方法模式的类图和相似?不过代码实现可不一样哦

抽象观察者:

package com.sjmx.observer.theory;

public interface Watcher {
    
     public void update(String str);
     
}

具体观察者:

package com.sjmx.observer.theory;

public class ConcreteWatcher implements Watcher {

    @Override
    public void update(String str) {
        
        if("warning".equals(str)){
            System.out.println("检查开始,结束打扫卫生!");
        }
         
    }

}
package com.sjmx.observer.theory;

public class ConcreteWatcher2 implements Watcher {

    @Override
    public void update(String str) {
         
        if("warning".equals(str)){
            System.out.println("检查开始,结束室外活动区整理!");
        }

    }

}
package com.sjmx.observer.theory;

public class ConcreteWatcher3 implements Watcher {

    @Override
    public void update(String str) {
         
        if("warning".equals(str)){
            System.out.println("检查开始,全体安静自习!");
        }

    }

}

 

主题(通知)接口:

package com.sjmx.observer.theory;

public interface Watcher {
    
     public void update(String str);
     
}

具体通知对象:

package com.sjmx.observer.theory;

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

public class ConcreteWatched implements Watched {

    // 存放观察者
    private List<Watcher> list = new ArrayList<Watcher>();

    @Override
    public void addWatcher(Watcher watcher)
    {
        list.add(watcher);
    }

    @Override
    public void removeWatcher(Watcher watcher)
    {
        list.remove(watcher);
    }

    @Override
    public void notifyWatchers(String str)
    {
        // 自动调用实际上是主题进行调用的
        for (Watcher watcher : list)
        {
            watcher.update(str);
        }
    }

}

客户端代码:

package com.sjmx.observer.theory;

public class Client {
    
    public static void main(String[] args)
    {
        Watched girl = new ConcreteWatched();
        
        Watcher watcher1 = new ConcreteWatcher();
        Watcher watcher2 = new ConcreteWatcher2();
        Watcher watcher3 = new ConcreteWatcher3();
        
        girl.addWatcher(watcher1);
        girl.addWatcher(watcher2);
        girl.addWatcher(watcher3);
        
        girl.notifyWatchers("warning");
    }
}

运行结构:

技术分享

 

 

看完代码:

1、观察者模式所做的工作就是接触耦合,让耦合的双方都依赖于抽象,而不依赖于实体。从而使得一方的 变化不会影响另一方。

2、缺点也很容易看见的,所有的实体都要方法相同,这在显示生活中是不可能的。比如,今天放假,学生停课,工人停止生产,股票停止交易,服务业开始服务等等。

 

《大话设计模式》——读后感 (6)老板回来了,我不知道?——观察者模式之理论实例(1)

标签:code   []   style   模式   通知   watch   方法   服务业   ack   

原文地址:http://www.cnblogs.com/chen1-kerr/p/7058633.html

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