`
youngmaster
  • 浏览: 57132 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java 设计模式之: 观察者模式(Observer)

阅读更多

//Subject.java

package com.youngmaster.model.Observer;

/**
 * @author youngmaster
 * @E-mail:youngmaster.fly@gmail.com
 * @version myEclipse 6.6
 * @create time:2009-11-2 上午01:08:15
 */

/**
 * 察者模式属于行为型模式,其意图是定义对象间的一种一对多的依赖关系,
 * 当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
 * 在制作系统的过程中,将一个系统分割成一系列相互协作的类有一个常见的副作用:
 * 需要维护相关对象间的一致性。我们不希望为了维持一致性而使各类紧密耦合,
 * 因为这样降低了他们的可充用性。这一个模式的关键对象是目标(Subject)和观察者(Observer)。
 * 一个目标可以有任意数目的依赖它的观察者,一旦目标的状态发生改变,所有的观察者都得到通知,
 * 作为对这个通知的响应,每个观察者都将查询目标以使其状态与目标的状态同步。这种交互也称为发布-订阅模式,
 * 目标是通知的发布者。他发出通知时并不需要知道谁是他的观察者,可以有任意数据的观察者订阅并接收通知。
 */

/**
 * subject
 * 目标接口
 */
public interface Subject {
	public void addObserver(Observer o);

	public void deletObserver(Observer o);

	public void notice();
}

 

//Observer.java

package com.youngmaster.model.Observer;
/**
 * @author youngmaster
 * @E-mail:youngmaster.fly@gmail.com
 * @version myEclipse 6.6
 * @create time:2009-11-2 上午01:08:49
 */

/**
 *观察者接口
 */
public interface Observer {
	public void update();
}

 

//Teacher.java

package com.youngmaster.model.Observer;

import java.util.Vector;

/**
 * @author youngmaster
 * @E-mail:youngmaster.fly@gmail.com
 * @version myEclipse 6.6
 * @create time:2009-11-2 上午01:09:27
 */

/**
 *目标接口实现
 */
public class Teacher implements Subject {

	private String phone;
	@SuppressWarnings("unchecked")
	private Vector students;

	@SuppressWarnings("unchecked")
	public Teacher() {
		phone = "";
		students = new Vector();
	}

	@SuppressWarnings("unchecked")
	@Override
	public void addObserver(Observer o) {
		students.add(o);
	}

	@Override
	public void deletObserver(Observer o) {
		students.remove(o);
	}

	@Override
	public void notice() {
		for (int i = 0; i < students.size(); i++) {
			((Observer) students.get(i)).update();
		}
	}

	public void setPhone(String phone) {
		this.phone = phone;
		notice();
	}

	public String getPhone() {
		return phone;
	}

}

 

//Student.java

package com.youngmaster.model.Observer;

/**
 * @author youngmaster
 * @E-mail:youngmaster.fly@gmail.com
 * @version myEclipse 6.6
 * @create time:2009-11-2 上午01:10:22
 */

/**
 *观察者接口实现
 */
public class Student implements Observer {

	private String name;
	private String phone;
	private Teacher teacher;

	public Student(String name, Teacher teacher) {
		this.name = name;
		this.teacher = teacher;
	}

	public void show() {
		System.out.println("Name:" + name + "\nTeacher's phone:" + phone);
	}

	@Override
	public void update() {
		phone = teacher.getPhone();
	}

}

 

//Client.java

package com.youngmaster.model.Observer;

import java.util.Vector;

/**
 * @author youngmaster
 * @E-mail:youngmaster.fly@gmail.com
 * @version myEclipse 6.6
 * @create time:2009-11-2 上午01:12:58
 */

/**
 *测试类
 */
public class Client {

	/**
	 * @param args
	 */
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
		Vector students = new Vector();
		Teacher teacher = new Teacher();
		for (int i = 0; i < 10; i++) {
			Student student = new Student("student-" + i, teacher);
			students.add(student);
			teacher.addObserver(student);
		}
		teacher.setPhone("13900000000");
		
		for (int i = 0; i < 10; i++)
			((Student) students.get(i)).show();
		
		System.out.println("\n============================\n");
		
		teacher.setPhone("13600000000");
		for (int i = 0; i < 10; i++)
			((Student) students.get(i)).show();
	}

}

 

 

分享到:
评论

相关推荐

    Java 设计模式-观察者模式(Observer)

    结合微信公众号讲解观察者模式,生动形象,关键是上手快啊

    详解Observer Pattern(观察者模式)在Java中的使用原理

    我们说学习Java应该从Swing开始,那么学习Swing最重要的思想就是对于观察者模式的理解(Observer Pattern)。因为,该设计模式在Java Swing框架中贯穿了始终。对于C#的委托、代理概念所使用的Callback(回调模式--...

    Java设计模式 设计模式介绍

    1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立性模式介绍 4、单态创立性模式介绍 5、单态创立性模式介绍 6、观察者模式介绍7、责任链模式 8、设计模式之Observer 9、...

    设计模式 观察者 发布/订阅 Observer

    Observer (观察者模式) 又叫做发布/订阅(Publish/Subscribe)模式。 当一个对象的改变同时会影响其他对象的行为的时候,可以使用此设计模式。 l 主题对象 :一个需要被关注的主题对象,这个主题对象改变会影响...

    JAVA设计模式之行为模式

    这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...

    Java 观察者模式的浅析

    Java 观察者模式的浅析 简单地说,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象。这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些观察者...

    Java设计模式之观察者模式(Observer模式)介绍

    主要介绍了Java设计模式之观察者模式(Observer模式)介绍,Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解,需要的朋友可以...

    Java内置观察者模式

    观察者模式:对象之间多对一依赖的一种设计方案,被依赖的对象为Subject,依赖的对象为Observer,Subject通知Observer变化,这个例子是java内置观察者模式

    java观察者模式介绍

    Observer模式定义对象间的一对多的依赖关系,当一个对象(被观察者)的状态发生改变...从名字上可以清楚的看出两者在Observer 设计模式中分别扮演的角色:Observer是观察者角色,Observable是被观察目标(subject)角色。

    [行为模式]head first 设计模式之观察者模式(observer)

    NULL 博文链接:https://jacky-dai.iteye.com/blog/1132063

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    第9章 观察者(observer)模式 72 第10章 调停者(mediator)模式 85 第11章 代理(proxy)模式 97 第12章 职责链(chain of responsibility)模式 115 第13章 享元(flyweight)模式 122 第14章 构造型模式介绍 130 第15章 ...

    33种JAVA设计模式DEMO

    观察者模式(Observer Pattern) 状态模式(State Pattern) 空对象模式(Null Object Pattern) 策略模式(Strategy Pattern) 模板模式(Template Pattern) 访问者模式(Visitor Pattern) 4 J2EE 模式 这些设计...

    观察者模式(Observer)原理图

    观察者模式(Observer Pattern)是一种对象行为型设计模式,它定义了对象之间的一对多依赖关系。 当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式通常用于实现分布式事件处理系统...

    面向对象初学者必须掌握的几种设计模式

    观察者模式 Observer:Swing中的事件模型 工厂模式 Factory:在JDK中遍地都是,比如JDBC、JNDI等,是学习Spring的基础 命令模式 Command:Struts框架的基石 单例模式 Singleton:最简单的设计模式,大量...

    详解Java编程的Observer观察者设计模式

    主要介绍了Java编程的Observer观察者设计模式,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象,需要的朋友可以参考下

    java设计模式教程+源代码

    AbstractFactory ( 抽象工厂 ) FactoryMethod ( 工厂方法 ) Singleton ( 单态模式 ) ...Observer ( 观察者模式 ) State ( 状态模式 ) Strategy ( 策略模式 ) TemplateMethod ( 模板方法 ) Visitor ( 访问者模式 )

    java设计模式期末考试选择题100道

    适合Java设计模式期末考试选择题复习,形式如下: 10.(单选题)Facade(外观)模式的意图是 正确答案: A A.希望简化现有系统的使用方法,你需要定义自己的接口 B.将一个无法控制的现有对象与一个特定借口相匹配。 C....

    23种设计模式的java源代码

    里面包含了23中设计模式源代码,其中包括工厂模式(Factory)、单例(Singleton)、观察者模式(Observer)、适配器模式(Adapter)、Template模式、Decorate模式、proxy模式等 这些代码对于初学者看起来稍微复杂一些,我...

    用Java实现23种设计模式

    用Java实现23种设计模式 1. 创建型模式 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern)...

    设计模式之Observer - 观察者模式

    NULL 博文链接:https://lgd-java2eye.iteye.com/blog/760350

Global site tag (gtag.js) - Google Analytics