创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”.这样可以降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关的工厂来完成.就像我们去商场购买商品时,不需要知道商品是怎么生产出来一样,因为它们由专门的厂商生产. 创建型模式分为以下几种. 单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式. 原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似…
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配. 行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为.由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性. 行为型模式是 GoF 设计模式中最为庞大的一类,它包含以下 11 种模式. 模板方法(Template Method)模式:定义…
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配. 行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为.由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性. 行为型模式是 GoF 设计模式中最为庞大的一类,它包含以下 11 种模式. 模板方法(Template Method)模式:定义…
结构型模式描述如何将类或对象按某种布局组成更大的结构.它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象. 由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性. 结构型模式分为以下 7 种: 代理(Proxy)模式:为某对象提供一种代理以控制对该对象的访问.即客户端通过代理间接地访问该对象,从而限制.增强或修改该对象的一些特性. 适配器(Adapter)模式:将一个类的接口转换成客户希望的…
摘要:装饰者模式通过组合的方式,提供了能够动态地给对象/模块扩展新功能的能力.理论上,只要没有限制,它可以一直把功能叠加下去,具有很高的灵活性. 本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:装饰者模式>,作者: 元闰子. 简介 我们经常会遇到"给现有对象/模块新增功能"的场景,比如 http router 的开发场景下,除了最基础的路由功能之外,我们常常还会加上如日志.鉴权.流控等 middleware.如果你查看框架的源码,就会发现 middleware…
本文接着介绍11种行为型模式里的备忘录模式.观察者模式.状态模式. 一.备忘录模式 在不破坏封装性的前提下,捕获一个对象的内部状态.并在该对象之外保存这个状态.这样以后就能够将该对象恢复到原先保存的状态.还是比較好理解的. 1.Memento 备忘录存储原发器对象的内部状态,这个类就是要存储的对象的状态.状态须要多少个变量,在Memento里就写多少个变量. public class Memento { private String state; public Meme*to(String st…
本文接着介绍行为型模式里的解释器模式.迭代器模式.中介者模式. 一.解释器模式Interpret 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言的中的句子. 1.AbstractExpression(抽象表达式) 声明一个抽象的解释操作,这个接口为抽象语法树中全部的节点所共享. public abstract class Expression {    abstract void interpret(Context ctx);} 2.Expression…
一.概述 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 二.适用性 1.当一个系统应该独立于它的产品创建.构成和表示的时候. 2.当要实例化的类是在运行时刻指定的时候,例如:通过动态装载. 3.为了避免创建一个与产品类层次平行的工厂类层次的时候. 4.当一个类的实例只能有几个不同状态组合中的一种的时候. 建立相应数目的原型并克隆它们可能要比每次用合适的状态手工实例化该类更方便一些. 三.参与者 1.Prototype:声明一个克隆自身的接口. 2.ConcreteProtot…
一.概述 定义一个用于创建对象的接口,让子类去决定实例化哪个类.工厂方法将一个类的实例化延迟至其子类. 二.适用性 1.当一个类不知道它所必须创建的对象的类的时候. 2.当一个类希望由其子类来指定它所创建的对象的时候. 3.当类将创建对象的职责委托给多个帮助子类的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候. 三.参与者 1.Product:定义工厂方法所创建的对象的接口. 2.ConcreteProduct:实现Product接口. 3.Creator:声明工厂方法,该方法返…
一.概述 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 二.适用性 1.一个系统要独立于它的产品的创建.组合和表示的时候. 2.一个系统要由多个产品系列中的一个来配置的时候. 3.当你要强调一系列相关的产品对象的设计以便进行联合使用的时候. 4.当你提供一个产品类库,而只想显示它们的接口而不是实现的时候. 三.参与者 1.AbstractFactory:声明一个创建抽象产品对象的操作接口. 2.ConcreteFactory:实现创建具体产品对象的操作. 3.Abstra…