设计模式(Design Pattern)
来源:互联网 发布:mac地址有什么用 编辑:程序博客网 时间:2024/06/06 08:29
设计模式(Design Pattern) - 行为型模式(Behavioral Pattern) - 观察者模式(Observer)
1、当一个对象(被观察)变化时,其它关联对象(观察者)都会随着变化!
2、关联关系:一对多;(一是被观察对象,多是观察者)
一、说明:
1、Observer 观察者(接口);
2、Guardian 观察者.实现类;
3、Watched 被观察(接口);
4、AbstractWatched 被观察对象(抽象类);
5、Baby 被观察对象.实现类。
二、Java实现,代码如下:
1、Observer
package com.designPattern.observer;/** * 观察者 * */public interface Observer { /** * 观察者 - 操作 */ public void action();}
2、Guardian
package com.designPatterns.observer;/** * 观察者 - 实现类 * */public class Guardian implements Observer { private String name; public Guardian(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public void action() { System.out.println(name + " : I'm coming !"); }}
3、Watched
package com.designPattern.observer;/** * 被观察 - 接口 * */public interface Watched { /** * 添加观察者 * @param entity 观察者 */ public void addObserver(Observer entity); /**删除观察者 * @param entity 观察者 */ public void delObserver(Observer entity); /** * 通知观察者 */ public void notifyObserver(); /** * 被观察对象的操作 */ public void operate();}
4、AbstractWatched
package com.designPattern.observer;import java.util.ArrayList;import java.util.List;/** * 被观察 - 抽象类 * */public abstract class AbstractWatched implements Watched { // 观察者列表 List<Observer> list = new ArrayList<>(); @Override public void addObserver(Observer entity) { list.add(entity); } @Override public void delObserver(Observer entity) { list.remove(entity); } @Override public void notifyObserver() { for (Observer entity : list) { entity.action(); } }}
5、Baby
package com.designPatterns.observer;/** * 被观察 - 实现类 * */public class Baby extends AbstractWatched { private String name; public Baby(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public void operate() { System.out.println(name + " : Cry!"); notifyObserver(); }}
6、Test
package com.designPattern.observer;/** * 测试类 * */public class Test { public static void main(String[] args) { Baby baby = new Baby("baby"); Guardian father = new Guardian("father"); Guardian mother = new Guardian("mother"); Guardian grandfather = new Guardian("grandfather"); Guardian grandmother = new Guardian("grandmother"); baby.addObserver(father); baby.addObserver(mother); baby.addObserver(grandfather); baby.addObserver(grandmother); baby.operate(); }}
7、输出:
baby : Cry!
father : I’m coming !
mother : I’m coming !
grandfather : I’m coming !
grandmother : I’m coming !
阅读全文
0 0
- 设计模式(Design Pattern)
- 设计模式(Design Pattern)
- 设计模式(Design Pattern)
- 设计模式(Design Pattern)
- 设计模式(Design Pattern)
- 设计模式(Design Pattern)
- 设计模式(Design Pattern)
- 设计模式(Design Pattern)
- 设计模式(Design Pattern)
- 设计模式(Design Pattern)
- 设计模式(Design Pattern)
- 设计模式(Design Pattern)
- 设计模式(Design Pattern)
- 设计模式(Design Pattern)
- 设计模式(Design Pattern)
- 设计模式(Design Pattern)
- 设计模式(Design Pattern)
- 设计模式(Design pattern)
- MFC多文档框架视图页面添加IE内核浏览器
- Vue实现动态显示textarea剩余字数
- Solr admin管理员界面介绍
- Mysql主从复制配置操作指导(主备)
- 一个不需要cookie与js却能实现类似cookie功能的手段
- 设计模式(Design Pattern)
- ElasticSearch 学习随笔
- DateConverter does not support default String to 'Date' conversion.的处理
- 程序员面试金典8.1
- View的圆角 IOS
- 反射-通过反射获取无参无返回值成员方法、带参带返回值成员方法并使用
- 常用字符串方法
- Android 中关于 【Cursor】 类的介绍
- TCP Split Handshake Attack