假设飞机由自我复制的能力. 生产飞机时, 先生成一部原型机, 因为生产原型机需要对原型机的各种参数进行调试, 调试出飞机的最好的参数. 这些参数确定后, 就可以进行批量生产, 批量生产就相当于飞机的Clone了. 如果生产每一台飞机都像生产原型机那样, 那效率是很低下的.
Client 使用者负责飞机部件的生产流程, 调用CPlanBuilder提供的接口.
CPlanePrototype提供Clone接口.
CHelicopter和CBattlePlane能自我复制的飞机.
图1
// 伪代码
// 生产原型机
CHelicopter* pCHelicopter = new CHelicopter;
pCHelicopter->Init();
CPlanePrototype* pCPlanePrototype = pCHelicopter;
// Client
CPlanePrototype* p = pCPlanePrototype->Clone();
// 需要多少, Clone多少.
1. 生产原型机的过程你可以使用Abstractr Factory模式, Builder模式等(如果是一些复杂对象的话). 用户需要某对象时, Clone就可以了.
2. pCPlanePrototype这个对象需要正确的管理好, 这就是原型.
3. 某些对象的状态很复杂而且经常变化时, Clone很好用, 因为对象自己最熟悉自己的状态, 把各种状态的赋值封装在Clone中, 非常符合"高内聚, 低耦合"原则.