设计模式根据模式的目的可以分为创建型, 行为型和结构型
创建型模式涉及到将对象实例化, 这类模式都提供了一个方法将客户从所需要实例化的对象中解耦
工厂方法模式: 由子类决定要创建的具体类是哪一个
抽象工厂模式: 允许客户创建对象的家族, 而无需指定他们的具体类
单例模式: 确保有且只有一个对象被创建
结构型模式可以让你把类或对象组合到更强大的结构中
装饰者模式: 包装一个对象以提供新的行为
适配器模式: 封装对象并提供不同的接口
外观模式: 简化一群类的接口
组合模式: 客户用一致的方式处理对象集合和单个对象
代理模式: 包装对象以控制对此对象的访问
行为型模式都涉及到类和对象如何交互及分配职责
策略模式: 封装可以互换的行为, 并使用委托来决定要使用哪一个
观察者模式: 让对象能够在状态改变时被通知
命令模式: 封装请求成为对象
模板方法模式: 由子类决定如何实现一个算法中的步骤
迭代器模式: 在对象的集合中游走, 而不暴露集合的实现
状态模式: 封装了基于状态的行为, 并使用委托在行为之间切换