画布 1
设计模式
  七大原则
    S 单一功能原则（Single Responsibility Principle，SRP）每个类都应该有一个单一的功能，并且该功能应该由这个类完全封装起来。所有它的（这个类的）服务都应该严密的和该功能平行（功能平行，意味着没有依赖）。
    O 开闭原则（Open Close Principle， OCP）：模块应该对于扩展是开放的（Open for extension），但是对于修改是封闭的（Closed for modification）。一个实体允许在不改变它的源代码的前提下变更它的行为。
    L 里氏代换原则（Liskov Substitution Principle，LSP）：派生类对象能够替换其基类对象被使用。如果调用的是父类的话，那么换成子类也完全可以运行。
    I 接口隔离原则（Interface Segregation Principle，ISP）：拆分非常庞大臃肿的接口成为更小的和更具体的接口（角色接口），这样客户将会只需要知道他们感兴趣的方法。
    D 依赖倒置原则（Dependency Inversion Principle DIP）：1、高层次的模块不应该依赖于低层次的模块，他们都应该依赖于抽象接口。2、抽象接口不应该依赖于具体实现，具体实现应该依赖于抽象接口。要求对抽象/接口进行编程，不要对实现进行编程，这样就降低了客户与实现模块间的耦合。
    最少知识原则（Least Knowledge Principle）：一个对象应对其它对象有尽可能少的了解。即一个实体应当尽量少地与其他实体之间发生相互作用，使得系统功能模块相对独立。只使用一个"."运算符（域运算符）。也称得墨忒耳定律
    合成复用原则（Composite Reuse Principle, CRP）：尽量使用对象组合，而不是继承来达到复用的目的。
    SOLID
  创建型模式
    工厂方法（Factory Method Pattern）定义一个创建对象的接口，但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。
    抽象工厂（Abstract Factory Pattern）将一组具有同一主题的单独的工厂封装起来。客户端程序需要创建抽象工厂的具体实现，然后使用抽象工厂作为接口来创建这一主题的具体对象。
    生成器模式（Builder Pattern）将复杂对象的建造过程抽象出来（抽象类别），使这个抽象过程的不同实现方法可以构造出不同表现（属性）的对象。
    惰性初始模式（Lazy Initial Pattern）推迟对象的创建、数据的计算等需要耗费较多资源的操作，只有在第一次访问的时候才执行。
    对象池模式（Object Pool Pattern）通过回收利用对象避免获取和释放资源所需的昂贵成本。
    原型模式（Prototype Pattern）用原型实例指定创建对象的种类，并且通过拷贝这些原型创建新的对象。
    单例模式（Singleton Pattern）确保一个类只有一个实例，并提供对该实例的全局访问。
    处理在不指定对象具体类型的情况下创建对象的问题
  结构型模式
    适配器模式（Adapter Pattern）将某个类的接口转换成客户端期望的另一个接口表示。适配器模式可以消除由于接口不匹配所造成的类兼容性问题。如同插座转换器。
    桥接模式（Bridge Pattern）把事物对象和其具体行为、具体特征分离开来，使它们可以各自独立的变化。事物对象仅是一个抽象的概念。如“圆形”、“三角形”归于抽象的“形状”之下，而“画圆”、“画三角”归于实现行为的“画图”类之下，然后由“形状”调用“画图”。
    组合模式（Composite Pattern）允许用户将对象组合成树形结构来表现“整体/局部”层次结构。用户对单个对象和组合对象的使用具有一致性的统一接口。
    修饰模式（Decorator Pattern）向某个对象动态地添加更多的功能。修饰模式是除类继承外另一种扩展功能的方法。
    外观模式（Facade Pattern）为子系统中的一组接口提供一个一致的界面， 外观模式定义了一个高层接口，这个接口使得这一子系统更加容易使用。
    享元模式（Flyweight Pattern）用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件；它适合用于当大量物件只是重复因而导致无法令人接受的使用大量内存。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构，当需要使用时再将它们传递给享元。
    代理模式（Proxy Pattern）为其他对象提供一个代理以控制对这个对象的访问。
    借由一以贯之的方式来了解元件间的关系，以简化设计。
  行为型模式
    命令模式（Command Pattern）将一个行动（action）及其参数封装为一个命令对象，于是这些行动可以被：1.重复多次2.取消（undo如果该对象有实现的话）3.取消后又再重做（redo）。
    责任链模式（Chain of Responsibility Pattern）为解除请求的发送者和接收者之间耦合，而使多个对象都有机会处理这个请求。将这些对象连成一条链，并沿着这条链传递该请求，直到有一个对象处理它。
    解释器模式（Interpreter Pattern）给定一个语言, 定义它的文法的一种表示，并定义一个解释器, 该解释器使用该表示来解释语言中的句子。
    迭代器模式（Iterator Pattern）提供一种方法顺序访问一个聚合对象中的各个元素，而又不暴露其内部的表示。
    中介者模式（Mediator Pattern）：对象与对象之间存在大量的关联关系，将对象之间的通信关联关系封装到一个中介类中单独处理，从而使其耦合松散，可以独立地改变它们之间的交互
    备忘录模式（Memento Pattern）：通过一个备忘录类专门存储对象状态。客户通过备忘录管理类管理备忘录类。
    观察者模式（Observer Pattern）：定义了对象间的一对多的依赖关系。当观察目标对象的状态发生改变，所有依赖于它的观察者都将得到通知，使这些观察者能够自动更新（即使用推送方式）。
    模板模式（Template Pattern）：定义了一个算法的步骤，并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下，重新定义算法中的某些步骤。
    状态模式（State Pattern）让一个对象在其内部状态改变的时候，其行为也随之改变。状态模式需要对每一个系统可能获取的状态创立一个状态类的子类。当系统的状态变化时，系统便改变所选的子类。
    策略模式（Strategy Pattern）定义一个算法族，将其各个分装，并且使他们有交互性（可以互相替换）。此模式让算法的变化独立于使用算法的客户。
    子类沙箱（Subclass Sandbox Pattern）基类定义抽象的沙箱方法和几个提供的操作。 将操作标为protected，表明它们只为子类所使用。 每个推导出的沙箱子类用提供的操作实现了沙箱函数。
    类型对象模式（Type Object Pattern）定义类型对象类和持有有类型对象的类。每个类型对象实例代表一种不同的逻辑类型。 每种有类型对象的类的实例保存一个对描述它类型的类型对象的引用。
    空对象模式 （Null Object Pattern）通过提供默认对象来避免空引用。
    用来识别对象之间的常用交流模式并加以实现。如此，可在进行这些交流活动时增强弹性。
  优化模式
    数据局部性（Data Locality Pattern）现代的CPU有缓存来加速内存读取。 它可以更快的读取最近访问过的内存的毗邻内存。 通过提高内存局部性来提高性能——保证数据以处理顺序排列在连续内存上。避免缓存不命中。
    脏标志模式（Dirty Flag Pattern）一组原始数据随着时间变化而改变。 使用昂贵的过程推定一组导出数据。 一个“脏”标识追踪导出数据是否与原始数据保持一致。 它在原始数据改变时被设置。 如果导出数据被请求时，该标识被设置了，那么重新计算并清除标识 否则的话，使用之前缓存的导出数据。
    空间区分（Spatial Partition Pattern）对于一系列对象，每个对象都有空间上的位置。 将它们存储在根据位置组织对象的空间数据结构中，让你有效查询在某处或者某处附近的对象。 当对象的位置改变时，更新空间数据结构，这样它可以继续找到对象。
    关注硬件特性，提高性能
  序列模式
    双缓冲模式（Double Buff Pattern）当信息从缓冲区中读取，它总是读取当前的缓冲区。 当信息需要写到缓存，它总是在下一缓冲区上操作。 当改变完成后，一个交换操作会立刻将当前缓冲区和下一缓冲区交换， 这样新缓冲区就是公共可见的了。旧的缓冲区成为下一个重用的缓冲区。
    游戏循环（Game Loop Pattern）一个游戏循环在游玩中不断运行。 每一次循环，它无阻塞地处理玩家输入，更新游戏状态，渲染游戏。 它追踪时间的消耗并控制游戏的速度。
    更新方法（Update Method Pattern）游戏世界管理对象集合。 每个对象实现一个更新方法模拟对象在一帧内的行为。每一帧，游戏循环更新集合中的每一个对象。
    关注逻辑运行的时序与推进
  解耦模式
    组件模式（Component Pattern）单一实体跨越了多个领域。为了保持领域之间相互分离，将每部分代码放入各自的组件类中。 实体被简化为组件的容器。
    事件队列（Event Queue Pattern）事件队列在队列中按先入先出的顺序存储一系列通知或请求。 发送通知时，将请求放入队列并返回。 处理请求的系统之后稍晚从队列中获取请求并处理。 这解耦了发送者和接收者，既静态又及时。
    服务定位器（Service Locator Pattern）服务 类定义了一堆操作的抽象接口。 具体的服务提供者实现这个接口。 分离的服务定位器提供了通过查询获取服务的方法，同时隐藏了服务提供者的具体细节和定位它的过程。
    修改一块代码一般不会需要修改另一块代码