摘要: 目的 空对象模式不属于 GoF 设计模式,但是它作为一种经常出现的套路足以被视为设计模式。它具有如下优点: 客户端代码简单 可以减少报空指针异常的几率 测试用例不需要考虑太多条件 返回一个对象或 null 应该用返回对象或者 NullObject 代替。NullObject 简化了死板的代码,消除了 阅读全文
posted @ 2020-09-18 16:16 phpyu 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 目的 它提供了在不破坏封装(对象不需要具有返回当前状态的函数)的情况下恢复到之前状态(使用回滚)或者获取对象的内部状态。 备忘录模式使用 3 个类来实现:Originator,Caretaker 和 Memento。 Memento —— 负责存储 Originator 的 唯一内部状态 ,它可以包 阅读全文
posted @ 2020-09-18 16:01 phpyu 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 目的 本模式提供了一种轻松的多组件之间弱耦合的协同方式。如果你有个 “情报中心”,观察者模式也是个好选择,类似于控制器(并非 MVC 意义上的控制器)。 所有关联协同的组件(称作 Colleague)仅与 MediatorInterface 接口建立耦合,面向对象编程中这是好事,一个良友胜于有多个朋 阅读全文
posted @ 2020-09-18 14:42 phpyu 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 目的 让对象变得可迭代并表现得像对象集合。 例子 在文件中的所有行(对象表示形式的)上逐行处理文件(也是对象) PHP 标准库 (SPL) 定义了一个最适合此模式的接口迭代器!往往也需要实现 Countable 接口,允许在迭代器对象上使用 count($object) 方法。 UML图 ★官方PH 阅读全文
posted @ 2020-09-17 22:04 phpyu 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 目的 为了封装调用和解耦。 我们有一个调用程序和一个接收器。 这种模式使用「命令行」将方法调用委托给接收器并且呈现相同的「执行」方法。 因此,调用程序只知道调用「执行」去处理客户端的命令。接收器会从调用程序中分离出来。 这个模式的另一面是取消方法的 execute (),也就是 undo () 。命 阅读全文
posted @ 2020-09-17 21:56 phpyu 阅读(362) 评论(0) 推荐(0) 编辑
摘要: 目的 建立一个对象链来按指定顺序处理调用。如果其中一个对象无法处理命令,它会委托这个调用给它的下一个对象来进行处理,以此类推。 例子 垃圾邮件过滤器。 日志框架,每个链元素自主决定如何处理日志消息。 缓存:例如第一个对象是一个 Memcached 接口实例,如果 “丢失” 它会委托数据库接口处理这个 阅读全文
posted @ 2020-09-17 21:50 phpyu 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 目的 为昂贵或者无法复制的资源提供接口。 代理模式(Proxy)为其他对象提供一种代理以控制对这个对象的访问。使用代理模式创建代理对象,让代理对象控制目标对象的访问(目标对象可以是远程的对象、创建开销大的对象或需要安全控制的对象),并且可以在不改变目标对象的情况下添加一些额外的功能。 在某些情况下, 阅读全文
posted @ 2020-09-16 22:52 phpyu 阅读(319) 评论(0) 推荐(0) 编辑
摘要: 目的 用来编写易于阅读的代码,就像自然语言一样(如英语) 例子 Yii 框架:CDbCommand 与 CActiveRecord 也使用此模式 Doctrine2 的 QueryBuilder,就像下面例子中类似 PHPUnit 使用连贯接口来创建 mock 对象 UML图 ★官方PHP高级学习交 阅读全文
posted @ 2020-09-16 22:49 phpyu 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 目的 目的是能够存储在应用程序中经常使用的对象实例,通常会使用只有静态方法的抽象类来实现(或使用单例模式)。需要注意的是这里可能会引入全局的状态,我们需要使用依赖注入来避免它。 例子 Zend 框架 1:Zend_Registry 实现了整个应用程序的 logger 对象和前端控制器等 Yii 框架 阅读全文
posted @ 2020-09-16 22:14 phpyu 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 目的 为了节约内存的使用,享元模式会尽量使类似的对象共享内存。在大量类似对象被使用的情况中这是十分必要的。常用做法是在外部数据结构中保存类似对象的状态,并在需要时将他们传递给享元对象。 UML 图 ★官方PHP高级学习交流社群「点击」管理整理了一些资料,BAT等一线大厂进阶知识体系备好(相关学习资料 阅读全文
posted @ 2020-09-16 22:09 phpyu 阅读(176) 评论(0) 推荐(0) 编辑