设计模式
冷月醉雪
这个作者很懒,什么都没留下…
展开
-
golang 设计模式(续)
模版模式(Template) 介绍 模版模式:模版模式在抽象类或父类中抽象出算法步骤作为模版,模版的具体推迟到子类实现。 ·模版模式在父类或抽象类中定义了一个算法骨架,并在父类或抽象类中实现共同的部分,各个不同的步骤由不同的子类分别实现; ·模版模式在父类的算法步骤中定义钩子(hook),在子类中判断并定义一些不是非通用步骤; ·模版模式与策略模式的不同之处在于,...原创 2018-02-02 11:29:19 · 310 阅读 · 0 评论 -
中介者模式
定义: 用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之前的交互。 主要解决 对象与对象之前存在大量的关联关系,这样势必会造成系统变得复杂,若一个对象改变,我们常常需要跟踪与之关联的对象,并做出相应的处理。 如何解决 将网状结构分离为星型结构 关键代码 将相关对象的通信封装到一个类中单独处理 ...原创 2018-05-04 09:53:01 · 170 阅读 · 0 评论 -
职责链模式
定义: 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之前的耦合关系,将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。 主要解决 职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无需关心请求的处理细节和请求的传递,所有职责链将请求的发送者和请求的处理者解耦了。 如何解决 职责链链扣类都现实统一的接口。 关键代码 ...原创 2018-05-04 09:53:12 · 239 阅读 · 0 评论 -
观察者模式
定义: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都要得到通知并自动更新。 主要解决 一个对象更新,其它对象也要更新 如何解决 目标类通知函数通知所有观察者自动更新 关键代码 在目标类中增加一个ArrayList来存放观察者们 //数据模型为目标类,视图为观察者类。当数据模型发生改变时,通知视图类更新 clas...原创 2018-05-04 09:53:30 · 180 阅读 · 0 评论 -
原型模式
定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 主要解决 在运行期建立和删除对象 何时使用 1).当我们的对象类型不是开始就能确定的,而这个类型是在运行期确定的话,那么我们通过这个类型的对象克隆出一个新的对象比较容易一些; 2).有的时候,我们需要一个对象在某个状态下的副本,此时,我们使用原型模式是最好的选择;例如:一个对象,经过一段处理之...原创 2018-04-26 12:13:42 · 165 阅读 · 0 评论 -
模版模式
定义 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 主要解决 多个子类有相同的方法,并且逻辑相同,细节有差异。 如何解决 对重要,复杂的算法,将核心算法设计为模板方法,周边细节由子类实现,重构时,经常使用的方法,将相同的代码抽象到父类,通过钩子函数约束行为。 关键代码 在抽象类实...原创 2018-04-26 12:16:44 · 130 阅读 · 0 评论 -
建造者模式
定义 将复杂对象的构建和其表示分离,使得同样的构建过程可以创建不同的表示 主要解决 一个复杂对象的创建工作,由各个部分的子对象用一定的算法构成;由于需求变化,这个复杂对象的各个部分经常面临变化,但将它们组合在一起的算法却相对稳定。 如何解决 将变与不变分开 关键代码 建造者:创建和提供实例,Director:管理建造出来的实例的依赖关系 缺点 ...原创 2018-04-26 12:19:40 · 142 阅读 · 0 评论 -
外观模式
定义 为子系统中的一组接口定义一个一致的界面,外观模式提供了一个高层接口,这个接口使得这一子系统更加容易被使用;对于复杂的系统,系统为客户提供一个简单的接口,把复杂的实现过程封装起来,客户不需要了解系统内部的细节。 主要解决 客户不需要了解系统内部复杂的细节,只需要一个接口;系统入口 如何解决 客户不直接与系统耦合,而是通过外观类与系统耦合 关键代码 客户与...原创 2018-04-26 12:22:11 · 170 阅读 · 0 评论 -
组合模式
定义 将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。 主要解决 将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。 如何解决 树枝和树叶实现统一接口,树枝内部组合该接口 关键代码 树枝内部组合该接口,并且含有内部属性list,里面放Compone...原创 2018-04-26 12:24:39 · 134 阅读 · 0 评论 -
代理模式
定义 为其它对象提供一种代理以控制对这个对象的访问 主要解决 在直接访问对象时带来的问题,比如:要访问的对象在远程服务器上。在面向对象系统中,有些对象由于某些原因,直接访问会给使用者或系统带来很多麻烦,可以在访问此对象时加上一个对此对象的访问层。 如何解决 增加中间代理层 关键代码 实现与被代理类组合 class Gril { public: ...原创 2018-04-26 12:27:45 · 167 阅读 · 0 评论 -
备忘录模式
定义: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原来保存的状态。 如何解决 通过一个备忘录类专门存储对象状态 关键代码 备忘录类、客户类、备忘录管理类;客户类不与备忘录类耦合,而是与备忘录管理类耦合。 typedef struct //需要保存的信息 { int grade; ...原创 2018-05-04 09:52:48 · 423 阅读 · 0 评论 -
装饰模式
定义: 动态地给一个对象添加一些额外的功能,就新增加功能来说,装饰器模式比生产子类更加灵活。 主要解决 通常我们为了扩展一个类经常使用继承的方式,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。 如何解决 将具体的功能划分,同时继承装饰者类。 关键代码 装饰类复合和继承组件类,具体的扩展类重写父类的方法 // class Dumplin...原创 2018-05-03 12:27:14 · 159 阅读 · 0 评论 -
Golang 设计模式
Golang实现设计模式的源码地址: https://github.com/zhenbianshu/DesignPattern 策略模式(Strategy) 简介 策略模式:将算法或操作抽象成实现共同接口、可以被替换的类,实现逻辑和具体算法的解耦。 ·将各种行为抽象成算法,封装算法为对象; ·算法实现共同接口,调用者调用时不考虑算法具体实现,调用接...原创 2018-02-01 14:04:22 · 761 阅读 · 0 评论 -
golang 设计模式(续二)
责任链模式(Chain of Responsibility) 介绍 责任链模式:将请求处理者串成"链",依次尝试处理请求,依次解耦请求和处理者; ·责任链模式将任务处理者划分先后次序,依次尝试,直到任务被处理; ·每个处理者存储自己的下一环;任务开始时选择最靠前的处理者试图处理任务; ·在遇到自己无法处理的情况,传递给自己的下一环来处理; 场景 ·适用于...原创 2018-02-03 11:37:03 · 248 阅读 · 0 评论 -
C++ 工厂模式
1)简单工厂模式 主要特点是需要在工厂类中做判断,从而创造相应的产品,当增加新产品时,需要修改工厂类。 typedef enum { T80 = 1, T99 }TankType; class Tank { public: virtual void message() = 0; }; class Tank8...原创 2018-04-24 15:07:09 · 645 阅读 · 0 评论 -
golang视角下的设计模式
单利模式 func NewSingleton() *singleton { if instance == nil { instance = &singleton{} } return instance } func NewSingleton() *singleton { l.Lock() // loc...原创 2018-03-26 13:06:02 · 491 阅读 · 0 评论 -
工厂模式
1)简单工厂模式: 主要特定是需要在工厂类中做判断,从而创造相应的产品,当增加新产品时,需要修改工厂类。 typedef enum { T80 = 1, T99 }TankType; class Tank { public: virtual void message() = 0; }; class Tank...原创 2018-04-24 12:24:38 · 163 阅读 · 0 评论 -
策略模式
定义: 是指定义一系列的算法,把它们一个个封装起来,并且使它们可以互相替换。使得算法可以独立于使用它的客户而变化,也就是说这些算法所完成的功能是一样的,对外接口是一样的,只是各自现实上存在差异。 意图: 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 主要解决: 在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。 何时...原创 2018-04-24 12:28:26 · 120 阅读 · 0 评论 -
适配器模式
定义 将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。 主要解决 主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。 何时使用 1、系统需要使用现有的类,而此类的接口不符合系统的需要。 2、想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些...原创 2018-04-24 12:35:38 · 143 阅读 · 0 评论 -
单利模式
定义: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主要解决: 一个全局使用的类频繁地创建与销毁。 何时使用: 想控制实例数目,节省系统资源的时候。 如何解决: 判断系统是否已存在单例,如果有则返回,没有则创建 关键代码: 构造函数是私有的 单利大约有两种实现方法:懒汉与饿汉: 懒汉:故名思义,不到万不得已就不会去...原创 2018-04-24 12:39:10 · 217 阅读 · 0 评论 -
桥接模式
定义: 将抽象部分与实现部分分离,使它们都可以独立变换。 主要解决: 在有很多中可能会变化的情况下,用继承会造成类爆炸问题,不易扩展。 如何解决 把不同的分类分离出来,使它们独立变化,减少它们之间的耦合 关键代码 将现实独立出来,抽象类依赖现实类 //将各种App、各种手机全部独立分开,使其自由组合桥接 class App { publ...原创 2018-05-03 12:24:01 · 123 阅读 · 0 评论 -
享元模式介绍
定义 运用共享技术有效地支持大量细粒度的对象 主要解决 在有大量对象时,把其中共同的部分抽象出来,如果有相同的业务请求,直接返回内存中已有的对象,避免重新创建。 如何解决 用唯一标识码判断,如果内存中有,则返回这个唯一标识码所标识的对象 关键代码 将内部状态作为标识,进行共享 //以Money的类别作为内部标识,面值作为外部状态。 enum Money...原创 2018-04-26 12:31:20 · 111 阅读 · 0 评论