为了账号安全,请及时绑定邮箱和手机立即绑定

Java系列:设计模式之观察者模式

标签:
Java

一、简介
观察者模式(Observer)完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面。一个对象只做一件事情,并且将他做好。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。
观察者设计模式定义了对象间的一种一对多的组合关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。
二、代码实例

package weather;

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

public class WeatherSubject {
    private List<Observer> observers=new ArrayList<Observer>();
    //把订阅天气的人添加到订阅者列表中
    public void attach(Observer observer){
        observers.add(observer);
    }

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

    protected void notifyObservers(){
        for(Observer observer:observers){
            observer.update(this);
        }
    }
}
package weather;

public class ConcreteWeatherSubject extends WeatherSubject{
    private String weatherContent;

    public String getWeatherContent() {
        return weatherContent;
    }

    public void setWeatherContent(String weatherContent) {
        this.weatherContent = weatherContent;
        //通知多有的订阅者
        this.notifyObservers();
    }

}
package weather;

import com.Subject;

public interface Observer {
    public void update(WeatherSubject weatherSubject);
}
package weather;

import com.ConcreteSubject;
import com.Subject;

public class ConcreteObserver implements Observer{
    private String observerName;
    private String observerContent;
    private String remindThing;

    //获取目标类的状态同步到观察者的状态中
    @Override
    public void update(WeatherSubject weatherSubject) {
        observerContent = ((ConcreteWeatherSubject)weatherSubject).getWeatherContent();
        System.out.println(observerName+"收到了"+observerContent+","+remindThing);

    }

    public String getObserverName() {
        return observerName;
    }

    public void setObserverName(String observerName) {
        this.observerName = observerName;
    }

    public String getObserverContent() {
        return observerContent;
    }

    public void setObserverContent(String observerContent) {
        this.observerContent = observerContent;
    }

    public String getRemindThing() {
        return remindThing;
    }

    public void setRemindThing(String remindThing) {
        this.remindThing = remindThing;
    }

}
package weather;

public class Client {
    public static void main(String[] args) {
        //1.创建目标
        ConcreteWeatherSubject weather=new ConcreteWeatherSubject();
        //2.创建观察者
        ConcreteObserver observerGirl=new ConcreteObserver();
        observerGirl.setObserverName("小明的女朋友");
        observerGirl.setObserverContent("是我们的第一次约会,地点万达广场,不见不散!");
        ConcreteObserver observerMun=new ConcreteObserver();
        observerMun.setObserverName("老妈");
        observerMun.setObserverContent("是一个购物的好日子");
        //3.注册观察者
        weather.attach(observerGirl);
        weather.attach(observerMun);
        //4.目标发布天气
        weather.setWeatherContent("明天天气晴朗,蓝天白云,气温28度");
    }
}
点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消