随笔分类 -  设计模式(PHP)

记录对设计模式的学习总结,代码示例语言使用PHP。
摘要:问题:1. 使用继承时,应该让父类成为子类的模板,所有重复的代码都应该上升到父类去,而不是让每个子类都去重复。2. 当要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,通常考虑使用模板方法来处理。 概念:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中 阅读全文
posted @ 2018-10-11 20:51 疯一样的狼人 阅读(148) 评论(0) 推荐(0) 编辑
摘要:问题:如果页面必须处理很多不同的任务,就应该考虑将任务进行封装。封装之后,向系统中增加新任务就会变得简单,并且可以将系统中的各部分分离开来。这时,我们就可以使用命令模式了。 概念:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。 实 阅读全文
posted @ 2018-09-17 00:13 疯一样的狼人 阅读(176) 评论(0) 推荐(0) 编辑
摘要:问题:使用组合模式开发时,每增加一个操作,就需要在局部类和组合类的各个子类中增加对于新操作的支持,这不但会使类变得越来越臃肿,而且每次都需要对多个类的代码进行修改。 概念:访问者模式,表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 实现: 阅读全文
posted @ 2018-09-16 23:58 疯一样的狼人 阅读(107) 评论(0) 推荐(0) 编辑
摘要:问题:观察者模式的核心是把客户元素(观察者)从一个中心类(主体)中分离开来。当主体知道事件发生时,观察者需要被通知到。同时,我们并不希望将主体与观察者之间的关系进行硬编码。这样,观察者的代码可被重复使用,不同主体可以随意组合使用多个观察者。 概念:观察者模式定义了一种一对多的依赖关系,让多个观察者对 阅读全文
posted @ 2018-09-16 22:55 疯一样的狼人 阅读(134) 评论(0) 推荐(0) 编辑
摘要:问题:若一味地使用类继承来解决问题,不仅需要在继承体系中创建大量的类,而且会造成代码重复。当类必须支持同一个接口的多种实现时,最好的办法常常是提取出这些实现,并将它们放置在自己的类型中,而不是通过继承原有的类去支持这些实现。 概念:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法 阅读全文
posted @ 2018-09-16 21:21 疯一样的狼人 阅读(130) 评论(0) 推荐(0) 编辑
摘要:问题:解释器模式就是用“迷你语言”来表现程序要解决的问题,以“迷你语言”写成“迷你程序”来表现具体的问题,例如正则表达式就是一个很好的例子。所以,通常当有一个语言需要解释执行,并且可以将该语言中的句子表示为一个抽象语法树时,就可以使用解释器模式了。 概念:给定一个语言,定义它的文法的一种表示,并定义 阅读全文
posted @ 2018-09-16 21:04 疯一样的狼人 阅读(110) 评论(0) 推荐(0) 编辑
摘要:问题:使用子系统的代码时,如果过于深入地调用子系统的逻辑代码,会导致代码耦合度过高,当子系统代码发生变化时,调用它的许多地方也需要进行相应的修改。为了避免这种情况的发生,我们需要为一个分层或一个子系统创建一个简单、清晰的对外接口。 概念:为子系统中的一组接口提供一个一致的界面,此模型定义了一个高层接 阅读全文
posted @ 2018-09-16 20:38 疯一样的狼人 阅读(108) 评论(0) 推荐(0) 编辑
摘要:问题:1. 为了满足一些只在某种特定情况下才会执行的特殊行为的需要,向原有类中添加新的代码,这样会增加原有类的复杂度,使其变得越来越难以维护,解决方法就是把类的核心职责和装饰功能区分开。2. 功能定义完全依赖于继承体系会导致类的数量过多,而且代码会产生重复。装饰模式使用组合和委托而不是只使用继承来解 阅读全文
posted @ 2018-09-10 21:56 疯一样的狼人 阅读(140) 评论(0) 推荐(0) 编辑
摘要:问题:在某些场景下,对于某些类而言,一个独立对象和多个对象组成的集合是没有差别的,即,一个独立对象支持的操作,多个对象组成的集合整体也能支持。当你发现需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑使用组合模式了。 实现 阅读全文
posted @ 2018-09-10 21:46 疯一样的狼人 阅读(138) 评论(0) 推荐(0) 编辑
摘要:问题:工厂方法模式带来了平行继承层次问题,每次添加新产品类,都需要去创建一个对应的具体工厂类。 概念:用原型实例指定创建对象的种类,并且通过拷贝这些原型实例创建新的对象。 实现:代码示例: 效果:1. 使用组合代替继承,无需维护一个大型的平行继承体系,促进了代码运行时的灵活性,减少了必须创建的类。2 阅读全文
posted @ 2018-09-10 21:07 疯一样的狼人 阅读(108) 评论(0) 推荐(0) 编辑
摘要:代码示例: 阅读全文
posted @ 2018-09-10 20:47 疯一样的狼人 阅读(142) 评论(0) 推荐(0) 编辑
摘要:问题:“工厂方法模式”很好地解决了产品类横向增长的问题,而“抽象工厂模式”则是在“工厂方法模式”的基础上,考虑如何将产品类进行纵向增长的问题。 概念:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 实现:1. 类图示例: 2. 代码示例: 效果:优点:1. 只对系统中功能相关的 阅读全文
posted @ 2018-09-10 20:39 疯一样的狼人 阅读(126) 评论(0) 推荐(0) 编辑
摘要:问题:1. 需要能够相对轻松地加入一些新的产品类型。2. 每一个产品类型都可定制特定的功能。 概念:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 实现:1. 类图示例: 2. 代码示例: 效果:优点:1. 实现了单一职责原则,创建者类的每一个子类都只需要负责实例化对应的产品子类。2. 添加 阅读全文
posted @ 2018-09-10 17:46 疯一样的狼人 阅读(123) 评论(0) 推荐(0) 编辑
摘要:问题:1. 应用程序不同部分之间需要通过某个类的唯一实例来共享一些数据。2. 某个类需要保证其只有唯一实例。 实现:1. 构造方法私有化,防止类外部实例化该类,从而出现多个实例对象。2. 使用public静态方法和private静态属性来间接实例化对象。代码示例: 效果:1. 可以通过单例对象在应用 阅读全文
posted @ 2018-09-10 17:31 疯一样的狼人 阅读(149) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示