设计模式10——原型模式(protype) 原型模式提出的背景在软件开发中对象的创建方式往往直接影响系统的扩展性和维护成本。传统做法是通过new直接实例化具体类这会让调用方与具体类紧密耦合在一起一旦需要新增或替换某个对象类型就必须改动所有相关调用代码。原型模式正是在这样的背景下提出的。它的核心思路是把一个对象作为“原型”通过克隆clone()来生成新对象而不是依赖new直接创建从而降低耦合、提升系统的灵活性与扩展性。以本文中的文件分割器为例高层代码只依赖抽象基类ISplitter不直接依赖BinarySplitter、TxtSplitter等具体类新增一种分割器时只需让新类继承ISplitter并实现clone()原有调用代码无需修改对象创建逻辑被封装在具体类的clone()内部符合“封装变化”的设计原则。案例创建基类抽象类//抽象类classISplitter{public:virtualvoidsplit()0;virtualISplitter*clone()0;//通过克隆自己来创建对象virtual~ISplitter(){}};然后创建几个子类继承于ISplitter基类classBinarySplitter:publicISplitter{public:virtualISplitter*clone(){returnnewBinarySplitter(*this);//返回子类对象}};classTxtSplitter:publicISplitter{public:virtualISplitter*clone(){returnnewTxtSplitter(*this);}};使用classMainForm:publicForm{ISplitter*prototype;//基类指针public:MainForm(ISplitter*prototype){this-prototypeprototype;}voidButton1_Click(){ISplitter*splitterprototype-clone();splitter-split();}};