随笔分类 - 设计模式
摘要:一个目标 管理变化,提高复用 两种手段 分解 vs 抽象 八大原则 依赖倒置原则 开放封闭原则 单一指责原则 Liskov替换原则 接口隔离原则 对象组合优于继承 封装变化点 面向接口编程 原则比具体的设计模式更重要,内化原则 重构技法 静态 —> 动态 早绑定 —> 晚绑定 继承 —> 组合 编译
阅读全文
摘要:“行为变化”模式 在组件的构建过程中,组件行为的变化经常到导致组件本身剧烈的变化。“行为变化”模式将组件的行为和组件本身进行解耦,从而支持组件行为的变化,实现两者之间的松耦合。典型模式:命令模式,访问器模式 命令模式 动机 在软件构建过程,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但是某
阅读全文
摘要:“数据结构”模式常常有一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定的数据结构,将极大的破坏组价的复用。这时候,将这些特定的数据结构封装在内部,在外部提供统一的接口,来实现与数据结构无关的访问,是一种行之有效的方案。典型模式 组合模式、职责链模式、迭代器模式 组合模式 动机 在软件在某
阅读全文
摘要:备忘录模式是“状态变化”模式中的一种。 动机 在软件构建过程中,某些对象的状态在转换过程中,可能 由于某种需求,要求程序能够回溯到对象之前的某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态,便会暴露对象的细节实现。 如何实现对象状态的良好保存与恢复,但同时又不会因此而破坏对象本身的封装
阅读全文
摘要:“状态变化”模式 在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?“状态变化”模式应运而生。典型模式 :State、 Memento State 状态模式 在实际开发中,经常会遇到,一个对象有多种状态,在每一个状态下,都有不同的行为。如下: 1
阅读全文
摘要:中介者也属于“接口隔离”模式中的一种。 动机 在软件构建中,会出现多个对象相互关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断的变化。 在这种情况下,我们可以使用一个“中介对象”来管理对象间的关联关系,避免相互交互对象之间的紧耦合引用关系,从
阅读全文
摘要:适配器也属于“接口隔离”模式的一种。 动机 在软件系统中,由于应用环境的变化,常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是对这些现存对象不满足的。 如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口? 生活中的Adapter 模式
阅读全文
摘要:代理模式也是“接口隔离”模式的一种。 动机 在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或某些操作系统需要安全控制,或需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。 如何在不失去透明操作对象的同时来管理、控制这些对象特有的复杂性?增加一层间接层是软件开发中常见
阅读全文
摘要:“接口隔离”模式在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题,甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来相互紧密关联的接口是一种常见的解决方案。典型模式 门面模式 代理模式 适配器 中介者 门面模式 系统间耦合的复杂度 方框内部是子系统,外部是客户系统 动机 上述A方案
阅读全文
摘要:“单一职责”模式:在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任。典型模式 • Decorator • Bridge 模式定义 动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模
阅读全文
摘要:Bridge桥模式也属于”的单一职责“模式中的典型模式。问题描述:我们绘制图形时,图形可以有不同形状以及不同颜色,比如圆形可以是红的,绿的,方形可以是红的绿的,如果用代码来描绘这些类,会有如下: 1 class Shape{ 2 }; 3 class Rectangle : public Shape
阅读全文
摘要:“对象性能”模式 面向对象很好的解决了“抽象”的问题,但是不可避免付出一定代价,如虚函数。通常情况,面向对象的成本可忽略不计。但是某些情况,面向对象所带来的成本必须谨慎处理。 典型模式 单件模式 享元模式 单例模式 动机 在软件系统中,经常有一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保
阅读全文
摘要:动机 在软件系统中,经常面临着"某些结构复杂的对象"的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。 如何应对这种变化?如何向"客户程序(使用这些对象的程序)"隔离出“这些易变对象”,从而使得依赖这些"易变对象"的客户程序不随着需求改变而改变。 举个例子:
阅读全文
摘要:工厂模式属于创建型模式,主要分为:简单工厂模式,工厂方法模式,抽象工厂模式 简单工厂模式 主要特点就是需要在工厂类中做判断,从而创造相应的产品,当增加新的产品时,需要修改工厂类。举例,有家生产处理器核的厂家,仅有一家工厂,能生产两种型号的处理器,客户需要什么样的处理器,一定要显式地告诉工厂生产。 例
阅读全文
摘要:“单一职责”模式 在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任。 典型模式• Decorator• Bridge 代码示例: 1 //业务操作 2 class Stream{ 3 public: 4 vir
阅读全文
摘要:观察者模式(Observer / Event)是组件协作模式的一种。 动机 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。 使用面向对象技术,可以
阅读全文
摘要:Strategy 策略模式 动机(Motivation) 在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。 如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题?
阅读全文
摘要:GOF - 23 模式分类 从目的来看: 创建型:将对象的部分创建工作延迟到子类或者其他对象,从而应对需求变化为对象创建时具体类型实现引来的冲击; 结构型:通过类继承或者对象组合获得更灵活的结构,从而应对需求变化为对象的结构带来的冲击; 行为型:通过类继承或者对象组合来划分类与对象间的职责,从而应对
阅读全文
摘要:什么是设计模式? “每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”。 ——Christopher Alexander ·从面向对象谈起底层 一、重新认识面向对象 理解隔离变化 宏观上,面向对象的构建方式更能适应软件变
阅读全文