架构师训练营 2 期 Week03 总结
代码重构、设计模式
设计模式的定义
每一种模式都描述了一种问题的通用解决方案。这种问题在我们的环境中,不停地出现。 设计模式 是一种可 重复使用 的解决方案。
模式的名称 - 由少量的字组成的名称,有助于我们表达我们的设计。 待解问题 - 描述了何时需要运用这种模式,以及运用模式的环境(上下文)。 解决方案 - 描述了组成设计的元素(类和对象)、它们的关系、职责以及合作。但这种解
结论 - 运用这种方案所带来的利和弊。主要是指它对系统的弹性、扩展性、和可移植性的
创建模式(Creational Patterns) 对类的实例化过程的抽象。 结构模式(Structural Patterns) 将类或者对象结合在一起形成更大的结构。 行为模式(Behavioral Patterns) 对在不同的对象之间划分责任和算法的抽象化。
类模式 以继承的方式实现模式,静态的。 对象模式 以组合的方式实现模式,动态的。
简单工厂模式及改进
单例模式
为什么要使用
Singleton 模式保证产生单一实例,就是说一个类只产生一个实例。使用 singletong 有两个原因:
是因为只有一个实例,可以减少实例频繁创建和销毁带来的资源消耗;
是当多个用户使用这个实例的时候,便于进行统一控制(比如打印机对象、音乐播放器--同一时间只能播放一首歌,操作系统回收站)。
前者是性能需求,后者是功能需求。
实现方法:


一定要有私有的构造函数,保证类实例只能通过 GetInstance() 方法获得。 单例中的成员变量是多线程重用的,可能会产生意想不到的结果,因此尽量将单例设计为无状态对象(只提供服务,不保存状态)。
适配器模式
模板方法模式
它是一种“类的行为模式”
基类负责算法的轮廓和骨架 子类负责算法的具体实现
基于“继承”的模板方法比“组合”更容易实现 在很多情况下,可以适当使用这种模式。
protected abstract void step1(); 强制子类实现该步骤。
protected void doSomething() { … } 子类不需要覆盖,但也可以覆盖之。 如想明确告诉子类“不要覆盖它”,最好标明:final
protected void setUp() { } 空的实现(缺省适配器模式) 子类可选择性地覆盖之,以便在特定的时机做些事。
策略模式
它是一种“对象的行为模式”
将条件语句转换成对于策略的多态性调用
将使用策略的人与策略的具体实现分离 策略对象可以自由组合
策略模式仅仅封装了“算法的具体实现”,方便添加和替换算法。但它并不关心何时使用何种算法,这个必须由客户端来决定。
组合模式
是一种“对象的结构模式”
装饰器模式
是一种“对象的结构模式” 适配器也被称作“包装器”,区别在于适配器是转换成另一个接口,而装饰器是保持接口不变。 包装器形成一条“链”。
在不改变对客户端的接口的前提下(对客户端透明) 扩展现有对象的功能
装饰器保持对象的功能不变,扩展其外围的功能 模板方法和策略模式则保持算法的框架不变,而扩展其内部的实现
都可以用来扩展对象的功能 但装饰器是动态的,继承是静态的 装饰器可以任意组合 但这也使装饰器更复杂,有可能会组合出荒谬的结果