观察者模式

来源:互联网 发布:淘宝网波司登羽绒服 编辑:程序博客网 时间:2024/05/22 12:12

观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。

  观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。


观察者模式

  观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。

观察者模式UML图

import java.util.ArrayList;import java.util.List;public class Observer {    public static void main(String[] args) {        Notice notice=new NoticeImpl();        notice.add(new Observer1());        notice.notice();    }}//通知者抽象interface Notice{    void add(IObserver iObserver);    void delete(IObserver iObserver);    void notice();}class NoticeImpl implements Notice{    List<IObserver> iObservers=new ArrayList<>();    @Override    public void add(IObserver iObserver) {        iObservers.add(iObserver);    }    @Override    public void delete(IObserver iObserver) {        iObservers.remove(iObserver);    }    @Override    public void notice() {        for (IObserver io:iObservers             ) {            io.notice();        }    }}//观察者抽象interface IObserver{    void notice();}class Observer1 implements IObserver{    @Override    public void notice() {        System.out.println("收到通知");    }}

观察者模式的结构

  一个软件系统里面包含了各种对象,就像一片欣欣向荣的森林充满了各种生物一样。在一片森林中,各种生物彼此依赖和约束,形成一个个生物链。一种生物的状态变化会造成其他一些生物的相应行动,每一个生物都处于别的生物的互动之中。

  同样,一个软件系统常常要求在某一个对象的状态发生变化的时候,某些其他的对象做出相应的改变。做到这一点的设计方案有很多,但是为了使系统能够易于复用,应该选择低耦合度的设计方案。减少对象之间的耦合有利于系统的复用,但是同时设计师需要使这些低耦合度的对象之间能够维持行动的协调一致,保证高度的协作。观察者模式是满足这一要求的各种设计方案中最重要的一种。

  下面以一个简单的示意性实现为例,讨论观察者模式的结构。

  观察者模式所涉及的角色有:

  ●  抽象主题(Subject)角色:抽象主题角色把所有对观察者对象的引用保存在一个聚集(比如ArrayList对象)里,每个主题都可以有任何数量的观察者。抽象主题提供一个接口,可以增加和删除观察者对象,抽象主题角色又叫做抽象被观察者(Observable)角色。

  ●  具体主题(ConcreteSubject)角色:将有关状态存入具体观察者对象;在具体主题的内部状态改变时,给所有登记过的观察者发出通知。具体主题角色又叫做具体被观察者(Concrete Observable)角色。

  ●  抽象观察者(Observer)角色:为所有的具体观察者定义一个接口,在得到主题的通知时更新自己,这个接口叫做更新接口。

  ●  具体观察者(ConcreteObserver)角色:存储与主题的状态自恰的状态。具体观察者角色实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态 像协调。如果需要,具体观察者角色可以保持一个指向具体主题对象的引用。


更多请看https://www.cnblogs.com/java-my-life/archive/2012/05/16/2502279.html

(JAVA实现的观察者模式)



阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 氟斑牙美白 氟斑牙怎么变白 氟斑牙价格 氟斑牙的临床表现 氟斑牙 四环素牙 氟斑牙如何变白 氟斑牙冷光美白 氟斑牙形成原因 乳牙氟斑牙 氟斑牙的形成 氟斑牙会遗传吗 氟斑牙 美容冠 氟斑牙怎样美白 四环素牙与氟斑牙 如何让氟斑牙变白 重度氟斑牙美白 氟斑牙分度 牙氟斑 氟斑牙是怎么形成的 怎么去牙渍 佛斑牙怎么变白 黄牙怎么变白简单方法 一口黄牙怎么变白 怎么让黄牙变白 怎样使黄牙变白 牙黑怎么办 黄牙怎样变白 牙黑是怎么回事 牙黄是什么原因 氟斑牙烤瓷牙多少钱 怎么使牙齿变白 冷光牙齿美白 怎样美白牙齿 冷光美白牙齿的危害 牙齿发黄 怎样能让牙齿变白 牙齿美白方法 如何美白牙齿 氟牙症 牙齿如何变白 牙齿怎样变白