随笔分类 - 设计模式
重要的是ider
摘要:介绍: 在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。 访问者模式是为了将数据结
阅读全文
摘要:介绍: 解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。比如正则表达式。 定义: 给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。 结构图:
阅读全文
摘要:介绍: 享元模式使用共享对象,用来尽可能减少内存使用量以及分享数据给尽可能多的相似对象;它适合用于当大量对象只是重复因而导致无法令人接受的使用大量内存。通常对象中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。 定义: 享元模式(FlyWeight),运用共享
阅读全文
摘要:介绍: 中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。 定义: 用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦
阅读全文
摘要:定义: 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 是一种递归操作,要注意所有接收者都无法处理请求的情况。 结构图: 代码 //Handler类,定义一个处理请求的接口 class Handler{
阅读全文
摘要:定义: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 在软件系统中,【行为请求者】与【行为实现者】通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做等处理时,这种无法抵御变化的紧耦合的设计就不太合适。命令模式就
阅读全文
摘要:定义: 将抽象部分与它的实现部分分离,使他们都可以独立的变化。 这里的抽象和实现分离是指把实现的多种方式独立出来,让他们各自变化;实现系统可能有多角度分类,每一种分类都有可能变化,把这种多角度分离出来让它们独立变化,减少它们的耦合,这就是桥接模式。 比如手机这个抽象,它的实现既可以按照品牌分类,也可
阅读全文
摘要:定义: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 单体模式分为懒汉模式和饿汉模式: 饿汉模式:在编译加载时就用静态初始化的方式实例化自己,优点是不需要编写线程安全代码,在多线程环境下它是安全的;缺点是提前占用系统资源。 懒汉模式:在第一次被引用时才实例化自己,优点是不必提前占用系统资源
阅读全文
摘要:定义: 将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。 也称为 整体-部分(Part-Whole)模式,它的宗旨是通过将单个对象(叶子节点)和组合对象(树枝节点)用相同的接口进行表示,使得客户对单个对象和组合对象的使用具有一致性。 其中根节
阅读全文
摘要:定义: 备忘录模式(Memento Pattern)在一个对象之外保存这个对象的某些状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 结构图: 代码: //Originator类 class Originator { private: String state; public: void
阅读全文
摘要:定义: 将一个类的接口转换成客户端需要的另外一个接口;adapter模式使得原本由于接口不兼容而不能一起工作的类能一起工作。 简而言之就是中间件,将上游客户端调用的接口和下游服务端提供的接口实施对接。 结构图: 代码: //Target,客户端调用的接口 Class Target { void Re
阅读全文
摘要:定义: 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。 工厂方法是生产一种产品,抽象工厂是生产一个产品族。 结构图: 代码: 果蔬工厂(分为北方果蔬和热带产果蔬) //两种抽象产品:水果、蔬菜 Class Fruit { } Class Veggie { } //四种具体产品
阅读全文
摘要:定义: 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听一个通知者对象。这个通知者对象在状态发生变化时,会通知所有观察者对象,使他们能够自己更新自己。 结构图: 代码: //通知者接口类 Class Subject { private: //观察者集合 IList<Observer>
阅读全文
摘要:定义: 为了将复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。应该考虑建造者模式。 即对复杂的构建过程和细节进行封装,使用户能更简洁的创建需要的对象。 结构图: Product:最终要生成的产品类,就是之前你需要一个个去设置构造函数的那个初始类。就是下面代码例子中的电脑类 Bui
阅读全文
摘要:定义: 为了系统中的一组接口提供一个一致的界面;定义了一个高层接口,使得子系统更加容易使用。 即对底层逻辑和接口进行一次整合封装。以至于外部能更容易的使用。 结构图: 代码: //子系统的四个类 class SubSystemOne { void MethodOne(); } class SubSy
阅读全文
摘要:定义: 模板模式提供一个代码复用平台。将变与不变区分开,将不变的部分抽取出来定义在父类中,比如算法骨架,一些公共的,固定实现。这些不变的被封闭起来,尽量不去修改他们;通过子类实现可变化的步骤。 结构图: 代码: //AbstractClass抽象类 class AbstractClass { pub
阅读全文
摘要:定义: 从一个对象在创建另外一个可定制的对象,而且不需知道任何创建的细节。 和重写拷贝构造函数一样,能简单的clong一个对象。注意深浅拷贝。 结构图: 代码: //抽象原型类,定义clong接口 class Prototype { public: Prototype Clong(); } //具体
阅读全文
摘要:定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 相比于简单工厂消去了内部判断逻辑,遵守了开放封闭原则。但是代码量和逻辑复杂度更高了。 结构图: 代码:水果工厂 (父类)水果类: Class Fruit { 。。。 } (子类)苹果类: Class
阅读全文
摘要:定义: 为其他对象提供一种代理以控制对这个对象的访问。 其实就是在访问对象时引入一定程度的间接性,因为这种间接性,可以附加许多用途。 结构图: 代码: //Subject 类 class Subject { //对外暴露的共用接口 public: void Request(); } //RealSu
阅读全文
摘要:定义: 动态的给一个对象增加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。 就是以组合的方式动态的为对象添加功能,比起继承,更符合开闭原则。 结构图: 代码: //Component类 class Component { public: //抽象核心职责,装饰器需要在这个职责基础上增加
阅读全文

浙公网安备 33010602011771号