设计模式之观察者模式

							观察者模式简述

1 基本概念:

当对象存在一对多关系时,目标对象的状态发生改变,需要通知到他的依赖对象时(观察者),采用观察者模式(行为型)。

2 优点:

观察者和被观察者是抽象耦合的
观察者和被观察者之间建立一套触发机制

3 缺点

如果有多个观察者时,把状态通知到每个观察者会耗费很多时间
如果观察者和被观察者有循环依赖时,观察目标会触发循环调用,可能导致系统崩溃
观察者只知道观察对象发生了改变,却不知道具体怎么变

4 适用情况:

在即时通讯应用里面,当有部分数据在本地发生更改了,马上通知观察者更新数据到云端并且更新本地缓存。

代码样例:核心代码是用一个ArrayList存放观察者。
Subject,Observer,Client类

public class Subject{
//观察者list
private List observers = new ArrayList();
private int state;
public int getState(){
return state;
}
//状态触发的入口
public void setState(int state){
this.state = state;
notifyAllObservers();
}
//加入观察者队列
public void attach(Observer observer){
observers.add(observer);
}
//状态改变时通知到所有观察者
public void notifyAllObservers(){
for(Observer obs:Observers){
obs.update();
}
}
}

//观察者抽象类,其他观察者实体类继承该类
public abstract class Observer{
protected Subject subject;
publiuc abstract void update();
}

//创建实体观察类
public class BinaryObserver extends Observer{
public BinaryObserver(Subject subject){
this.subject = subject;
this.subject.attach(this);
}
public void update(){
System.out.println(“Binary String”);
}
}

public class OctalObserver extends Observer{
public OctalObserver (Subject subject){
this.subject = subject;
this.subject.attach(this);
}
public void update(){
System.out.println(“Octal String”);
}
}

public class HexaObserver extends Observer{
public HexaObserver (Subject subject){
this.subject = subject;
this.subject.attach(this);
}
public void update(){
System.out.println(“Hexa String”);
}
}
//观察者测试类
public class ObserverDemo{
public static void main(String args[]){
//创建被观察者类
Subject subject = new Subject();
new BinaryObserver (subject);
new OctalObserver (subject);
new HexaObserver (subject);
//调用该方法模拟状态改变通知观察者
subject.setState(15);
/*
执行结果:
Binary String
Octal String
Hexa String
*/
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值