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

设计模式学习笔记之二:观察者模式

时间:2016-07-22 01:11:15      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:

观察者模式定义了对象之间一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

技术分享

Observer

package com.singland.dp.observer;

public interface Observer {
    public void update(Subject subject);
}

MyObserver1

package com.singland.dp.observer;

public class MyObserver1 implements Observer {

    @Override
    public void update(Subject subject) {
        System.out.println(String.format("MyObserver1: You are %s ?", subject.getMsg()));
    }
}

MyObserver2

package com.singland.dp.observer;

public class MyObserver2 implements Observer {

    @Override
    public void update(Subject subject) {
        System.out.println(String.format("MyObserver2: You are %s ?", subject.getMsg()));
    }
}

Subject

package com.singland.dp.observer;

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

public class Subject {
    
    private String msg;
    
    private List<Observer> observers = new ArrayList<Observer>();

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
    
    public void registerObserver(Observer observer) {
        observers.add(observer);
    }
    
    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }
    
    public void notifyObservers() {
        for (Observer observer : observers) {
            observer.update(this);
        }
    }

}

MyTest

package com.singland.dp.observer;

import org.junit.Test;

public class MyTest {
    
    @Test
    public void test() {
        Subject subject = new Subject();
        subject.registerObserver(new MyObserver1());
        subject.registerObserver(new MyObserver2());
        subject.setMsg("Linda");
        subject.notifyObservers();
    }

}

当项目中的业务逻辑有关于出版者跟订阅者的概念的时候,我们应该第一时间想到使用观察者设计模式来处理问题,观察者设计模式应该是最常见的设计模式了,java甚至提供了内置的观察者设计模式供开发人员使用,但是java内置的观察者设计模式还是有一些局限性的:

1. java.util.Observable是一个类而非接口,这违背了面向对象设计原则:面向接口编程而非针对实现编程。
2. setChanged方法是protected的,这意味着如果我们要使用这个方法就必须继承自Observable类,而java是只能单继承的,违背了组合优于继承原则
以上缺点限制了java内置观察者模式的可复用性。
当然,如果以上缺点并不会对项目中的业务逻辑造成什么问题的话,就大胆使用java内置观察者模式吧。

设计模式学习笔记之二:观察者模式

标签:

原文地址:http://www.cnblogs.com/stonefeng/p/5693560.html

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