架构师训练营 Week 03 总结
1 面向对象的设计模式
设计模式,是结构的组成元素,但不限于经典的GoF(Gang of Four 四人帮)23种设计模式,而是只任何符合面向对象五大原则的、可复用的解决方案。
学习设计模式要多练习,最好的状态就是熟悉规律,忘记各种条款,写代码时自然会使用复合面向对象设计五大原则的设计。此时,无招胜有招。
1.1 设计模式的分类
1.1.1 从功能上分
创建模式(Creational Patterns),对类的实列化过程的抽象。
结构模式(Structural Patterns),将类或者对象结合再一起形成更大的结构。
行为模式(Behavioral Patterns),对在不同的对象之间划分责任和算法的抽象化。
1.1.2 从方式上分
类模式,以继承的方法实现模式,静态的。
对象模式,以组合的方式实现模式,动态的。
不被建议以这个角度对设计模式进行分类。
1.2 工厂模式
Factory
1.2 单例模式
Singleton
1.2 适配器模式
Adapter
1.2.1 适配器的作用
系统需要使用现有的类,而这个类的而接口与我们所需要的不同
例如,我们需要对List进行排序,但是我们需要一个Sortable接口,原有的List接口不能满足需求。我们需要一个适配器将List接口转化为Sortable接口。

上面,类的适配器,其实是不符合Liskov替换原则的。对象的适配器更优。
1.3 模板方法
控制执行顺序
1.3.1 使用时机
将一个大方法打破,变成多个可扩展的步骤
将if/else或switch语句换成多态
1.4 策略模式
Strategy
定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。

1.5 组合模式
Composite
1.5.1 举例
Windows界面的实现方式

Component是所有组件的基类
Button、Checkbox是具体的控件
Container是控件容器,它有一个children字段,用来存储它所包含的子控件
1.6 装饰器模式
Decorator
像IOStream的StringStream或BufferStream之间可以相互包装(装饰)
与适配器不同的是,适配器是适配不同的接口,装饰器模式是对同样的接口增加功能
1.6.1 装饰器的特征
在构造函数传入和自己所继承的继承

1.6.2 举例
JUnit是一个Java测试用例工具

Test为测试接口
TestCase是测试用例的抽象类
TestSuite是Test的容器,可以装载TestCase,亦可以用来装载自身组合成树状结构
TestDecorator是装饰器,对Test的runTest方法扩展功能
RepeatTest,可实现重复测试
TestSetup,增加setUp()和tearDown()两个方法,在runTest()前后使用
PreformaceTests是性能测试类,通过在实现TestSetup接口,记录时间,即可以实现性能测试

评论