- 策略模式
class Context {
public:
Strategy strategy;
Context (Strategy& strategy)
{
this.strategy = strategy;
}
void ContextInterface()
{
strategy.AlgorithmInterface();
}
}
- 装饰模式
把类中的装饰功能从类中搬移去除,这样可以简化原有的类。把每个要装饰的功能放在单独的类中,
并让这个类包装它所要装饰的对象,因此,当需要执行特殊行为时,客户代码就可以在运行时根据需要有选择地、
按顺序地适用装饰功能包装对象了。 - 原型模式
“简历复印” - 原型模式就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。 - 建造者模式
“画小人” - 从观察者模式到委托和事件
- 反射 - 利用字符串来实例化对象,而变量是可以更换的。将程序由编译时转为运行时。
- 适配器模式:类适配器(需要支持多继承) + 对象适配器 - 有点亡羊补牢的意味
- 备忘录: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
- 组合模式:将对象组合成树形结构
father.Add(child) - 迭代器(for_each): 当你需要对聚集有多种方式遍历时,可以考虑用迭代器模式
- 单例模式:构造方法私有
- 桥接模式:实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。(手机品牌 + 手机软件)
- 命令模式:烤羊肉串引来的思考
- 责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,
直到有一个对象处理它为止 - 解释器模式:正则表达式
- 访问者模式(最复杂的模式):适用于数据结构相对稳定的系统。它吧数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化。
- 合成/聚合复用原则:尽量使用合成/聚合,尽量不要使用类继承