观察者模式

php常用几种设计模式的应用场景

一笑奈何 提交于 2019-12-06 06:47:34
php常用几种设计模式的应用场景 1.单例设计模式 所谓单例模式,即在应用程序中最多只有该类的一个实例存在,一旦创建,就会一直存在于内存中! 单例设计模式常应用于数据库类设计,采用单例模式,只连接一次数据库,防止打开多个数据库连接。 一个单例类应具备以下特点: 单例类不能直接实例化创建,而是只能由类本身实例化。因此,要获得这样的限制效果,构造函数必须标记为private,从而防止类被实例化。 需要一个私有静态成员变量来保存类实例和公开一个能访问到实例的公开静态方法。 在PHP中,为了防止他人对单例类实例克隆,通常还为其提供一个空的私有__clone()方法。 单例模式的例子: <?php /** * Singleton of Database */ class Database { // We need a static private variable to store a Database instance. privatestatic $instance; // Mark as private to prevent it from being instanced. private function__construct() { // Do nothing. } private function__clone() { // Do nothing. } public static

安卓常用的6种设计模式总结

a 夏天 提交于 2019-12-05 23:37:59
最近看到两篇博客,觉得很不错,记录一下 转载自 https://blog.csdn.net/u012583459/article/details/47079529 和 https://blog.csdn.net/u012583459/article/details/47079549 由于项目变更的频繁性,作为一名程序员,我们需要掌握设计模式的必要性,就不言而喻~~,下面就是一些我自己学习的设计模式总结。 接下来,主要是针对几个比较常用模式进行讲解,主要是以下几种: 观察者模式 适配器模式 代理模式 工厂模式 单例模式 命令模式 1.观察者模式(Observer Pattern) 释义:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更新自己。 故事理解:观察者想知道公司所有MM的情况,只要加入公司的MM情报邮件组就行了,tom负责搜集情报,当发现新情报时,不用一个一个通知我们,直接发布给邮件组,我们作为订阅者(观察者)就可以及时收到情报啦。 常见实例:1.BaseAdapter.registerDataSetObserver和BaseAdapter.unregisterDataSetObserver两方法来向BaseAdater注册、注销一个DataSetObserver ; 2

观察者模式

痴心易碎 提交于 2019-12-05 17:42:44
       定义   观察者模式: 定义了一种对象间的一对多依赖关系,一旦被依赖对象改变状态,所有观察者都会得到通知并自动更新 。    实例   我们在日常生活中,微信公众号的运作模式便是典型的观察者模式的实现,一旦公众号新推了内容,所有关注公众号的账号都会得到通知。    优缺点   观察者模式的优点是可以实现表示层与数据逻辑层的分离,可以在观察者与被观察者之间建立一个抽象的耦合,支持广播通信。   缺点是如果一个观察者的被观察者太多的话,通知动作会花费大量的时间。而且如果观察者与被观察者之间存在循环依赖的话,观察目标可能会触发它们的循环调用,造成系统崩溃。    类图   被观察者维护着一个观察者的集合,在有事件时循环通知集合中的观察者。   被观察者抽象规定了被观察者的行为,必须包括:新增观察者、删除观察者、通知观察者。   观察者抽象规定了观察者的行为,必须包括:接收通知。   示例   观察者抽象: /** * @Author Nyr * @Date 2019/11/26 19:21 * @Description 观察者抽象 */ public interface Obsever { /** * @Author Nxy * @Date 2019/11/26 19:21 * @Param msg:通知消息 * @Return * @Exception *

HeadFir设计模式---观察者

守給你的承諾、 提交于 2019-12-05 15:40:13
表达公式 注册者 + 订阅者 = 观察者模式 设计气象站 气象站接口 /** ** 布告板 ** @author lollipop ** @since 2019/11/24 **/ public interface DisplayElement { /** 显示 **/ void display(); } /** * 观察者 * @author lollipop * @since 2019/11/24 */ public interface Observer { /** * 更新 * @param temperature * @param humidity * @param pressure */ void update(float temperature,float humidity,float pressure); } /** * 主题接口 * @author lollipop * @since 2019/11/24 */ public interface Subject { /** * 注册 */ void registerObserver(Observer o); /** * 注销 */ void removeObserver(Observer o); /** * 通知 */ void notifyObserver(); } 气象实现 /** * @author

案例分析:设计模式与代码的结构特性

为君一笑 提交于 2019-12-05 15:07:53
我要分析的是一个Java框架 RxJava,他是一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库,它能够方便的实现Java的异步操作。 代码仓库: https://github.com/ReactiveX/RxJava RxJava使用观察者模式,当我们需要使用异步操作时就发送一个数据流,订阅者这个时候被调用去处理异步操作。 最简单的异步操作如上,通过Subscribe方式注册。观察者模式面向的需求是:A 对象(观察者)对 B 对象(被观察者)的某种变化高度敏感,需要在 B 变化的一瞬间做出反应。举个例子,新闻里喜闻乐见的警察抓小偷,警察需要在小偷伸手作案的时候实施抓捕。在这个例子里,警察是观察者,小偷是被观察者,警察需要时刻盯着小偷的一举一动,才能保证不会漏过任何瞬间。程序的观察者模式和这种真正的『观察』略有不同,观察者不需要时刻盯着被观察者(例如 A 不需要每过 2ms 就检查一次 B 的状态),而是采用注册(Register)或者称为订阅(Subscribe)的方式,告诉被观察者:我需要你的某某状态,你要在它变化的时候通知我。 来源: https://www.cnblogs.com/cgsilent/p/11929927.html

Python笔记:观察者模式

和自甴很熟 提交于 2019-12-05 00:59:26
观察者模式中的主题对象一般存在着一个其他服务依赖的核心服务,并且维护着其他依赖此核心服务的对象列表(即观察者或监视者列表),当主题对象发生变化时,观察者应该改变自己的状态或者进行某些操作 观察者模式中的三个角色: 主题: 即观察者观察的对象,一般是需要有注册和注销方法,用来添加观察者和删除观察者。 观察者基类: 这个类主要是需要定义一个接口,以便主题发生变化时可以得到对应的通知信息。 观察者: 这个类需要具体实现基类中的“通知”接口,以便和主题的变化保持同步。 主题的两种通知方式: 拉模型: 这个方式重心在观察者上,当主题发生变化时,会广播所有的观察者,然后由观察者来获取相应的数据。 推模型: 这个方式重心在主题上,当主题发生变化时,主题将根据观察者的需要将自身的变化推送给需要的观察者。 观察者模式的优点: 观察者模式中彼此交互的对象都是保持松耦合的。主题对观察者唯一的了解就是观察者实现的“通知”接口,除此之外它们之间都是互不影响且独立存在的,可以根据需要对自身作出修改。 可以随时添加或删除观察者。 这种模式下,可以在很少甚至不修改主题或观察者的情况下进行对象之间高效的数据发送。 其他注意点: 观察者模式中是可以有多个主题和多个观察者之间的对应关系的,但是一定要弄清楚它们之间的关系以及变化,不然就会变得非常复杂。 一般情况是由主题来触发“通知”方法的

node初步学习

霸气de小男生 提交于 2019-12-05 00:08:26
Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高。 Node.js 几乎每一个 API 都是支持回调函数的。 Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。 Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数. 来源: https://my.oschina.net/u/3014477/blog/3131355

设计模式——行为型模式之观察者模式(六)

故事扮演 提交于 2019-12-04 21:58:19
观察者模式 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。 介绍 意图: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 主要解决: 一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。 何时使用: 一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。 如何解决: 使用面向对象技术,可以将这种依赖关系弱化。 关键代码: 在抽象类里有一个 ArrayList 存放观察者们。 应用实例: 1、拍卖的时候,拍卖师观察最高标价,然后通知给其他竞价者竞价。 2、西游记里面悟空请求菩萨降服红孩儿,菩萨洒了一地水招来一个老乌龟,这个乌龟就是观察者,他观察菩萨洒水这个动作。 优点: 1、观察者和被观察者是抽象耦合的。 2、建立一套触发机制。 缺点: 1、如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间。 2、如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。 3、观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的,而仅仅只是知道观察目标发生了变化。 使用场景:

设计模式之观察者模式小结

纵然是瞬间 提交于 2019-12-04 21:55:24
说明:主要参考《Head First设计模式(中文版)》,使用C#代码实现。 1、观察者模式UML图 2、气象监测类图 3、气象监测代码(书中C#版) 3.1 Observer public interface IObserver { void Update(float temperature, float humidity, float pressure); } public interface IDisplayElement { void Display(); } public class CurrentConditionDisplay : IObserver, IDisplayElement { private readonly ISubject _weatherData; private float _temperature; private float _humidity; public CurrentConditionDisplay(ISubject weatherData) { _weatherData = weatherData; _weatherData?.RegisterObserver(this); } public void Update(float temperature, float humidity, float pressure) {

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

随声附和 提交于 2019-12-04 21:18:59
观察者模式定义 观察者模式定义了一对多的的依赖关系,让一个或多个观察者对象监测一个主题对象,这样一个主题对象在状态上的变化能够通知所有的依赖于此对象的那些观察者对象,使这些对象能够自动更新。 观察者模式实现 -- 被观察查的接口对象 -- 具体被观察者对象 维护所有观察者对象列表,状态发生变化时会发送通知给所有的观察者对象 -- 观察者对象 -- 具体观察者对象 // 被观察者对象的接口 public interface MsgSubject { void registerObserver(Observer o); void removeObserver(Observer o); void notifyObserver(); } public class Msg implements MsgSubject { private List<Observer> observers = new ArrayList<>(); //观察者列表 private String msg; @Override public void registerObserver(Observer o) { observers.add(o); } @Override public void removeObserver(Observer o) { observers.remove(o); } @Override