设计模式使用手册
名称 | 定义 | 变化点 | 我的实践总结 |
策略模式 | 定义了算法族,分别封装起来,让它们之间可以互换,让算法的变化独立于使用算法的客户。 | 算法,行为变化 |
|
观察者模式 | 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态是,它所有的依赖者都会接收到通知并自动更新。 | 消息接收者变化 | 可以很好的解耦接收者和观察者,不必过多的考虑都有哪些部分要被通知到,即解耦了,也可以让sender,的代码更加内聚,不必增加多余的职责。 |
装饰者模式 | 动态的将职责附加到对象上,若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 | 注意变化点,需要动态的为对象附加职责。职责,行为变化 |
|
工厂方法模式 | 定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个,工厂方法让类吧实例化推迟到子类。 | 需要创建的类型变化。 |
|
抽象工厂模式 | 提供一个接口,用于创建相关或依赖对象的家族,而不需要指定具体类。 | 类型族变化。 |
|
单件模式 | 确保一个类只有一个实例,并提供一个全局访问点。 | 类的数量变化 |
|
命令模式 | 将"请求"封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象,命令模式也支持可撤销的操作。 | 动作的执行者是变化点。 |
|
适配器模式 | 将一个类的接口,转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作的不间。 | 变化点是客户接口和被适配接口的不一致,且这个不一致是变化点。 |
|
外观模式 | 提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 | 使客户和复杂多变的子系统解耦 |
|
模板方法模式 | 在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 | 变化的是算法结构中的部分步骤。 | 需要注意的是,模板方法有很多中变体,而且实现的时候,如果是必须由子类实现的,那么实现为抽象类,如果是可由子类选择实现的,那么实现为钩子,给出基本的实现,子类可以覆盖。 |
组合模式 | 允许你将对象组合成树形结构来表现"整体/部分"层次结构,组合能让客户以一致的方式处理个别对象以及对象组合。 | 变化的主体是个别对象,或者是对象组合。无论涉及到多少个对象,处理的方式都是一样的。 |
|
状态模式 | 允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。 | 变化的主体是对象的行为,这样的一组行为,和对象的状态对应。 |
|
装饰者 : 扩展包装的对象。
适配器: 行为的转换。
外观模式:简化接口
好莱坞原则:别调用我们,我们会调用你。
依赖倒置原则:要依赖抽象,不要依赖具体类。
这里要说明的是,由于高层需要调用底层的组件,而高层并不知道底层什么时候会发生改变,为了让系统更具灵活性,高层依赖于抽象。
而具体类也依赖于抽象,实现高层和底层的依赖分离。所谓的倒置就是高层依赖底层,倒置为,高层,底层依赖于抽象。
state machine VS strategy partern
strategy : 行为的变化
state machine : 对象本身状态的变化,并且影响行为的表现。