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

设计模式之观察者模式

时间:2018-06-12 16:22:55      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:信息处理   upd   move   ring   array   add   运行   @param   分享   

1、什么是观察者模式?
观察者模式就是一种对象间一对多的依赖关系,当对象的状态改变时,通知所有依赖该对象的对象去做信息处理。
2、观察者模式具体实现角色关系
2.1 抽象主题角色
抽象主题角色定义了可以注册、删除和通知观察者的行为
2.2 具体主题角色
具体主题实现了抽象主题功能
2.3 抽象观察者角色
抽象观察者角色定义了信息处理接口
2.4 具体观察者角色
具体观察者实现了抽象观察者信息处理接口,实现具体信息处理功能
3、代码实现
/**
* 抽象主题角色
*/
public interface Topic {
/**
* 观察者注册
* @param observer
*/
void registerObserver(Observer observer);

/**
* 删除观察者
* @param observer
*/
void removeObserver(Observer observer);

/**
* 通知观察者
*/
void notifyObservers();

/**
* 主题状态变化
* @param msg
*/
void msgChange(String msg);
}

public class TopicImpl implements  Topic{
private List<Observer> observerList = new ArrayList<Observer>();
private String msg ;

@Override
public void registerObserver(Observer observer) {
this.observerList.add(observer);
}

@Override
public void removeObserver(Observer observer) {
this.observerList.remove(observer);
}

@Override
public void notifyObservers() {
for(Observer observer : observerList){
observer.update(msg);
}
}

@Override
public void msgChange(String msg) {
this.msg = msg;
}
}

/**
* 抽象观察者
*/
public interface Observer {
/**
* 观察者收到信息做处理
* @param msg
*/
void update(String msg);
}

/**
* 观察者1
*/
public class ObserverImpl implements Observer{
@Override
public void update(String msg) {
System.out.println("ObserverImpl receive msg :" + msg);
}
}

/**
* 观察者2
*/
public class ObserverImpl2 implements Observer{
@Override
public void update(String msg) {
System.out.println("ObserverImpl2 receive msg:" + msg);
}
}

/**
* 测试类
*/
public class MainTest {
public static void main(String[] args) {
Topic topic = new TopicImpl();

Observer observer1 = new ObserverImpl();
Observer observer2 = new ObserverImpl2();

topic.registerObserver(observer1);
topic.registerObserver(observer2);

topic.msgChange("Java 是面向对象的语言");
topic.notifyObservers();
}
}

4、运行结果

 技术分享图片

 





设计模式之观察者模式

标签:信息处理   upd   move   ring   array   add   运行   @param   分享   

原文地址:https://www.cnblogs.com/tspeking/p/9172985.html

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