【设计模式】19、观察者模式

 1 package com.shejimoshi.behavioral.Observer;
 2
 3
 4 /**
 5  * 功能:学生观察者
 6  * 时间:2016年3月7日上午10:28:00
 7  * 作者:cutter_point
 8  */
 9 public interface Student
10 {
11     //根据相应的事件作出反应
12     public abstract void reaction();
13 }
 1 package com.shejimoshi.behavioral.Observer;
 2
 3
 4 /**
 5  * 功能:学生类具体观察者
 6  * 时间:2016年3月7日上午10:30:57
 7  * 作者:cutter_point
 8  */
 9 public class SeniorHighSchoolStudents implements Student
10 {
11     //老师
12     private Teacher teacher;
13     private String name;    //名字
14
15     public SeniorHighSchoolStudents()
16     {
17     }
18
19     public SeniorHighSchoolStudents(Teacher t, String n)
20     {
21         this.teacher = t;
22         this.name = n;
23     }
24
25     /**
26      * 学生做出相应的反应
27      */
28     @Override
29     public void reaction()
30     {
31         String action = teacher.getAction();
32         System.out.println("老师说:" + action + "\t" + name + "回到教室,准备学习");
33     }
34
35 }
 1 package com.shejimoshi.behavioral.Observer;
 2
 3
 4 /**
 5  * 功能:老师类,作为通知者
 6  * 时间:2016年3月7日上午10:31:16
 7  * 作者:cutter_point
 8  */
 9 public interface Teacher
10 {
11     /**
12      * 添加学生
13      * @param student
14      */
15     public void addStrudnet(Student student);
16
17     /**
18      * 开除一个同学
19      * @param student
20      */
21     public void removeStudent(Student student);
22
23     /**
24      * 开始上课
25      */
26     public void classBegin();
27
28     /**
29      * 取得通知事件
30      * @return
31      */
32     public String getAction();
33 }
 1 package com.shejimoshi.behavioral.Observer;
 2
 3 import java.util.ArrayList;
 4 import java.util.List;
 5
 6
 7 /**
 8  * 功能:曹老师
 9  * 时间:2016年3月7日上午10:36:30
10  * 作者:cutter_point
11  */
12 public class TeacherChao implements Teacher
13 {
14     private List<Student> ls = new ArrayList<Student>();
15     private String action;    //事件
16
17     @Override
18     public void addStrudnet(Student student)
19     {
20         ls.add(student);
21     }
22
23     @Override
24     public void removeStudent(Student student)
25     {
26         ls.remove(student);
27     }
28
29     @Override
30     public void classBegin()
31     {
32
33         for(Student s : ls)
34         {
35             //通知上课开始
36             s.reaction();
37         }//for
38     }
39
40     public String getAction()
41     {
42         return action;
43     }
44
45     public void setAction(String action)
46     {
47         this.action = action;
48     }
49
50 }

测试代码:

 1 package com.shejimoshi.behavioral.Observer;
 2
 3
 4 /**
 5  * 功能:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变的时候,所有依赖于它的对对象都得到通知并被自动更新
 6  * 适用:当一个抽象模式有两个方面的时候,其中一个方面依赖另外一个方面。将这两种封装在独立的对象中以使它们可以独立地改变和复用
 7  *         当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变
 8  *         当一个对象必须通知其他对象,而它又不能假定其它对象是谁。换言之,你不希望这些对象时紧密耦合的
 9  * 时间:2016年3月7日上午8:32:18
10  * 作者:cutter_point
11  */
12 public class Test
13 {
14     public static void main(String[] args)
15     {
16         TeacherChao tc = new TeacherChao();
17         //学生
18         SeniorHighSchoolStudents xiaoming = new SeniorHighSchoolStudents(tc, "小明");
19         SeniorHighSchoolStudents xiaocheng = new SeniorHighSchoolStudents(tc, "小城");
20         SeniorHighSchoolStudents xiaohong = new SeniorHighSchoolStudents(tc, "小红");
21         SeniorHighSchoolStudents xiaozhi = new SeniorHighSchoolStudents(tc, "小智");
22         SeniorHighSchoolStudents xiaohua = new SeniorHighSchoolStudents(tc, "笑话");
23
24         tc.addStrudnet(xiaoming); tc.addStrudnet(xiaocheng); tc.addStrudnet(xiaohong);
25         tc.addStrudnet(xiaozhi); tc.addStrudnet(xiaohua);
26
27         tc.setAction("上课");
28         tc.classBegin(); //老师上课啦
29
30     }
31 }

测试结果:

老师说:上课	小明回到教室,准备学习
老师说:上课	小城回到教室,准备学习
老师说:上课	小红回到教室,准备学习
老师说:上课	小智回到教室,准备学习
老师说:上课	笑话回到教室,准备学习

  

时间: 2024-10-05 05:01:09

【设计模式】19、观察者模式的相关文章

设计模式(16) 观察者模式(OBSERVER)C++实现

意图: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 动机: 将一个系统设计成一系列相互协作的类有一个常见的副作用:需要维护相关对象之间的一致性. 观察者模式定义一种交互,即发布-订阅: 一个对象当自身状态发生改变时,会发出通知,但是并不知道谁是他的接收者,但每个接收者都会接收到通知,这些接受者称为观察者. 作为对通知的响应,每个观察者都将查询目标状态,然后改变自身的状态以和目标状态进行同步. 使用场景: 使对象封装为独立的改变和使用:

大话设计模式_观察者模式(Java代码)

观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使他们自己能够自动更新自己.简单描述:1个Subject类(可以是抽象类可以是接口),可以有多个具体Subject类(继承抽象Subject),此具体Subject持有多个观察者的引用,在此具体Subject状态发生变化的时候调用这些观察者的相应方法.另外,这些持有的引用是抽象的,不是具体的,而这些引用所指向的对象时具体的观察者(即需要作出更新的具体观察者,这些具体

常用设计模式之观察者模式 + 事件委托

常用设计模式之观察者模式 + 事件委托 作用及UML (摘自<大话设计模式>) Code 1 abstract class Subject{ 2 protected String state; 3 public void setState(String state){this.state = state;} 4 public String getState(){return this.state;} 5 6 private List<Observer> observers = ne

设计模式之观察者模式(Observer)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

设计模式 1 ——观察者模式

设计模式目录: 设计模式 1 ——观察者模式 一.基本定义 何谓观察者模式?观察者模式定义了对象之间的一对多依赖关系,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并且自动更新. 在这里,发生改变的对象称之为观察目标,而被通知的对象称之为观察者.一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,所以么可以根据需要增加和删除观察者,使得系统更易于扩展. 观察者模式又称为发布-订阅模式. 二.基本结构 首先先看观察者模式的UML类图. 分析: Subject:目标.他把所有

C#设计模式(17)——观察者模式(Observer Pattern)

原文:C#设计模式(17)--观察者模式(Observer Pattern) 一.引言 在现实生活中,处处可见观察者模式,例如,微信中的订阅号,订阅博客和QQ微博中关注好友,这些都属于观察者模式的应用.在这一章将分享我对观察者模式的理解,废话不多说了,直接进入今天的主题. 二. 观察者模式的介绍 2.1 观察者模式的定义 从生活中的例子可以看出,只要对订阅号进行关注的客户端,如果订阅号有什么更新,就会直接推送给订阅了的用户.从中,我们就可以得出观察者模式的定义. 观察者模式定义了一种一对多的依赖

【设计模式】观察者模式

生活中,当某件事发生时,应该通知所有的相关者.例如,上课地点有变,要通知所有学习这门课的同学. 在软件设计中,当一个对象的状态发生变化是,如何通知与它相关的所有对象,就是我们今天要谈到的观察者模式. 观察者模式 概述 定义了一种一对多的依赖关系.让多个观察者对象同事监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有的观察者对象,使它们能够自动更新自己. 实际上,观察者模式所做的工作就是在解除耦合.让耦合的双方都依赖于抽象,而不是依赖于具体.从而使得各自的变化都不会影响另一边的变化. 结

设计模式:观察者模式

设计模式:观察者模式 : http://www.cnblogs.com/li-peng/archive/2013/02/04/2892116.html 观察者模式是我们经常用的一个模式,比如在用wcf做服务的时候通知客户端做一些操作一般用设计者模式. 今天做一个订报纸的小例子来理解一下观察者模式  出版者+订阅者=观察者模式 用下边的图来说就是    人民日报+订阅者=观察者模式 只要是订阅了人民日报的人,有了新报纸就会送到订阅者那里去, 当你不想订的时候取消就不订阅就不会再收到报纸了. //报

设计模式之-观察者模式

该文代码来自设计模式之惮一书. 观察者模式定义: 观察者模式也叫做发布订阅模式. 观察者模式中的角色: 1.被观察者 被观察者职责为管理观察者并通知观察者. 2.观察者 对接受到的消息进行处理. /// <summary> /// 被观察者 /// </summary> public abstract class Subject { /// <summary> /// 观察者集合 /// </summary> private List<IObserva

&lt;&lt;Head First设计模式&gt;&gt;之观察者模式学习

1.概念 定义了对象之间的一对多依赖关系,当一个对象(主题对象)的状态改变时,它的所有依赖者(观察者对象)都会收到通知并自动更新. 2.优势 观察者模式实现了主题对象与观察者对象之间的松耦合,当有新的观察者时,无需修改主题对象的代码,只需要新的观察者对象实现接口.在程序运行的过程中,可以随时注册和删除观察者而不影响主体对象. 观察者模式使主题(Subject)对象和观察者(Observer)对象都可以被轻易地复用. 3.Java中观察者模式 Java API有内置的观察者模式,java.util