`
xieyaxiong
  • 浏览: 41079 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

design pattern——观察者模式

 
阅读更多

 



 针对问题:在消息-通知 的程序结构中,为了通知待通知的对象,需在消息服务中持有所有的待通知的对象,消息服务和大量的待通知对象紧密的耦合在一起,无论是新添加一个通知对象、或是取消通知都必须改变消息服务。为了解决这个问题,消息服务(主题)必须提供注册和删除的接口,不仅如此,主题要想统一管理待通知的对象(观察者),所有观察者必须遵循某一规范,也就是在所有观察者中抽象出一个接口,主题无须打理观察者是什么,只要它遵循规范就行,这样就将以前的耦合进行了抽象,也就是松耦合。

 

 

 

 

观察者模式结构图

 

 

 

 

 

 

观察者模式实现代码

/**
 * 主题接口
 * @author bruce
 *
 */
public interface Subject {
	
	public void registerObserver(Observer observer);
	
	public void removeObserver(Observer observer);
	
	public void notifyObservers();

}




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





/**
 * 主题实现
 * @author bruce
 *
 */
public class ConcreteSubject implements Subject{
	
	private List<Observer> observers=new ArrayList<Observer>();
	

	public void notifyObservers() {
		for(Observer observer:observers){
			observer.update();
		}
	}

	public void registerObserver(Observer observer) {
		if(!observers.contains(observer)){
			observers.add(observer);
		}
	}

	public void removeObserver(Observer observer) {
		if(observers.contains(observer)){
			observers.remove(observer);
		}
	}
	

}





/**
 * 观察者A
 * @author bruce
 *
 */
public class ConcreteObserverA implements Observer{
	
	private Subject subject;
	
	public ConcreteObserverA(Subject subject){
		this.subject=subject;
		this.subject.registerObserver(this);
	}

	public void update() {
		// TODO Auto-generated method stub
		System.out.println("通知观察者A");
	}

}





/**
 * 观察者B
 * @author bruce
 *
 */
public class ConcreteObserverB implements Observer{
	
	private Subject subject;
	
	public ConcreteObserverB(Subject subject){
		this.subject=subject;
		this.subject.registerObserver(this);
	}

	public void update() {
		// TODO Auto-generated method stub
		System.out.println("通知观察者B");
	}

}






/**
 * 测试
 * @author bruce
 *
 */
public class Client {
	
	public static void main(String[] args) {
		Subject subject=new ConcreteSubject();//创建主题
		
		Observer observerA=new ConcreteObserverA(subject);//创建观察者A,并注册
		Observer observerB=new ConcreteObserverB(subject);//创建观察者B,并注册
		
		System.out.println("---------");
		subject.notifyObservers();
		
		System.out.println("---------");
		subject.removeObserver(observerA);//观察者A取消收听
		subject.notifyObservers();
		
		/**
		 * output:
		 * ---------
			通知观察者A
			通知观察者B
		   ---------
			通知观察者B
		 * 
		 */
	}

}

 

  • 大小: 5.9 KB
分享到:
评论

相关推荐

    design-pattern-java.pdf

    撤销功能的实现——备忘录模式(三) 撤销功能的实现——备忘录模式(四) 撤销功能的实现——备忘录模式(五) 观察者模式-Observer Pattern 对象间的联动——观察者模式(一) 对象间的联动——观察者模式(二) ...

    Observer HeadFirst design pattern

    在"Observer HeadFirst design pattern"中,作者通过生动的比喻和互动式的例子,帮助读者深入理解观察者模式的核心概念和实现方式。 观察者模式的核心思想是将"主题"(Subject)与"观察者"(Observer)解耦,主题...

    Head First Design Pattern

    5. **观察者模式(Observer)**:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式广泛应用于事件驱动编程和发布/订阅系统。 6. **装饰器...

    GoF的经典著作设计模式(Design Pattern)

    19. **观察者模式**:定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 20. **状态模式**:允许对象在其内部状态改变时改变它的行为,对象看起来似乎改变...

    Design Pattern FrameworkTM

    - 详细解释了观察者模式的原理及应用场景。 - 分析了观察者模式在 .NET 平台上的实现细节。 - **第 3 章:装饰器模式**(页码:6) - 描述了装饰器模式的作用及其与其他模式的区别。 - 展示了装饰器模式在 .NET ...

    GOF之23种设计模式的C#实现:DesignPattern.zip

    - 观察者模式(Observer):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 - 状态模式(State):允许对象在其内部状态改变时改变其行为,对象看...

    HeadFirst Design Pattern

    3. 行为型模式:这类模式主要关注对象间的交互和责任分配,如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、命令模式(Command)、备忘录模式(Memento...

    Introduction to Design Pattern in C#

    观察者模式(Observer)定义了对象之间的一对多依赖关系,当一个对象改变状态时,所有依赖于它的对象都会得到通知并被自动更新;职责链模式(Chain of Responsibility)通过把请求从一个对象传到下一个对象的方式,...

    design-pattern(设计模式,包括创建型、结构型、行为型三大类共23种常见的设计模式和J2EE常见设计模式等).zip

    - 观察者模式:定义对象间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 - 状态模式:允许对象在其内部状态改变时改变其行为,看起来像改变了其类。 - 策略模式:...

    模式举例代码——设计模式和举例代码

    - 观察者模式:定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 - 状态模式:允许一个对象在其内部状态改变时改变它的行为,看起来像是改变了它的类。 -...

    GOF-设计模式-Design Patterns-英文原版-高清-有目录-有页码

    - **观察者**(Observer):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 - **状态**(State):允许一个对象在其内部状态改变时改变它的行为。 - **...

    Design Pattern

    - 观察者模式(Observer):定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。 - 状态模式(State):允许对象在内部状态改变时改变它的行为,对象看起来...

    设计模式 Head First

    #### 第2章:让对象保持同步——观察者模式 观察者模式是一种行为型设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。本章通过具体的示例,...

    Cocoa design pattern

    观察者模式(Observer Pattern)**:当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这一模式在Cocoa中用于实现动态数据绑定等功能。 **2. 代理模式(Proxy Pattern)**:通过代理对象来...

Global site tag (gtag.js) - Google Analytics