随笔分类 - 设计模式
PHP常用设计模式
摘要:设计模式-适配器模式( Adapter Pattern) 概要 记忆关键词:转换,兼容接口 定义:将一个类的接口转换成客户希望的另外一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 分析:在适配器模式中,客户端调用适配器以获得相应功能,适配器扩展适配者以实现对应功能。
阅读全文
摘要:设计模式-外观模式(Facade) 概要 记忆关键词:对外统一接口 定义:为了使复杂的子系统更容易被使用,应当为子系统的众多接口提供一个简洁的高层接口。 分析:外观模式为子系统的众多接口提供了统一的高层接口,使子系统更容易使用。 类型:结构型 外观模式结构图如下: 代码示例: public clas
阅读全文
摘要:设计模式 - 简单工厂模式(Simple Factory Pattern) 概要 记忆关键字:工厂类创建对象 定义:通过工厂类创建对象,并且根据传入参数决定具体子类对象的做法,就是简单工厂模式。 分析:如果一个类的实例需要在许多地方被创建和初始化,而初始化的代码也比较复杂。此时可以考虑使用简单工厂模
阅读全文
摘要:设计模式-代理模式(Proxy Pattern) 概要 记忆关键字:代理控制 定义:为其他对象提供一种代理以控制对这个对象的访问。 分析: 1)通过代理类,给对象的行为增加辅助功能的解决方案,就是代理模式 2)在程序运行时,动态地为被代理对象生成代理类,借助编程语言当中的"反射"特性。 3)动态代理
阅读全文
摘要:设计模式-抽象工厂模式(Abstract Factory Pattern) 概要 记忆关键词:抽象接口 定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。 分析:如果待创建的产品非常多,我们不需要为每一个产品类配上一个工厂类,而是可以把这些产品进行分组。抽象工厂模式是一种把产
阅读全文
摘要:设计模式-建造者模式(Builder) 概要 记忆关键词:类和构造分离 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 分析: 1)当一个类的构造函数参数个数超过4个,而且这些参数有些是可选的参数,考虑使用构造者模式。 2)构建者模式的精髓是将复杂对象的构建过程封装
阅读全文
摘要:设计模式-原型模式(Prototype) 概要 记忆关键词:原型实例、拷贝 定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 分析:原型模式就是从一个样板对象中复制出一个内部属性一致的对象。它是在内存中拷贝二进制流,比new一个对象的性能好很多。 原型模式结构图如下: 一、深拷
阅读全文
摘要:设计模式-职责链模式(Chain of Responsibility) 概要 记忆关键词:传递请求,职责链接 定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将多个对象连成一条链,并沿着这条链发送请求,直到有一个对象处理它为止。 分析:当客户提交一个请求,请求是沿链传递
阅读全文
摘要:设计模式-状态模式(State Pattern) 概要 记忆关键词:状态变成类 定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 类型:行为型 状态模式结构图如下: 一、能解决什么问题 它主要用来解决对象在多种状态转换时,需要对外输出不同行为的问题。状态和行为是一一对应
阅读全文
摘要:静态代理和动态代理 一、什么是代理模式? 代理模式(Proxy Pattern)给某一个对象提供一个代理,并由代理对象控制原对象的引用。代理对象在客户端和目标对象之间起到中介作用。 代理模式可以分为静态代理和动态代理两种类型,而动态代理中又分为JDK动态代理和CGLIB代理两种。 如下图: 二、静态
阅读全文
摘要:模板方法模式(Template Method Pattern) 概要 记忆关键字:模板方法 定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。 类型:行为型 模版方法模式结构图如下: 一、涉及的角色 1. Abs
阅读全文
摘要:软件设计思想以及面向对象的设计原则 概要 在日常开发中,如果要评判代码的质量如何,我们是不是需要有一种标准? 相信大家都听说过“高内聚,低耦合”,即类的内聚性是不是很高,耦合度是不是很低。这一原则可以作为我们评判软件设计的好坏。 通俗的说,我们就需要尽量让写出的程序易于维护,减少程序与程序之间的复杂
阅读全文
摘要:享元模式(FlyWeight Pattern) 概要 记忆关键字:细粒度、共享 定义:运用共享技术有效地支持大量细粒度的对象 分析:共享对象,将对象的一部分状态(内部状态)设计成可共享的,以减少对象的数量,达到节省内存的目的。 翻译由来:FlyWeight 这个英文词汇直译更接近 "轻量级" 的含义
阅读全文
摘要:设计模式-装饰模式(Decorator) 概要 记忆关键字:附加职责 定义:动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。 分析:装饰模式通过对原有的类进行功能扩展。依靠组合来实现类功能的扩展,并且支持多种嵌套。动态地给对象添加功能,避免通过子类扩展功能。 类型:结
阅读全文
摘要:设计模式-策略模式(Stategy Pattern) 概要 记忆关键词:算法替换 定义:定义了一个算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 类型:行为型 策略模式结构图如下: 一、解决了什么问题? 1. 算法的选择和切换 策略模式通过将具体的算法
阅读全文
摘要:设计模式-单例模式(Singleton) 概要 记忆关键字: 唯一实例 定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点 分析:唯一实例的受控访问,可以严格地控制客户怎么样访问以及何时访问 单例模式结构图如下: 一、解决什么问题? 单例模式可以用来管理一些共享资源,比如数据库连接池,线程池
阅读全文
摘要:设计模式-观察者模式(observer) 概要 记忆关键词:通知、自动更新 定义:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 分析:观察者模式又叫做发布-订阅(Publish/Subscr
阅读全文
摘要:设计模式-工厂方法模式(Factory Method Pattern) 概要 记忆关键词:子类决定实例化 定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。 分析: 工厂方法模式结构图如下: 一、能解决什么问题? 二、涉及的角色 1. 抽象接口 统一的
阅读全文