☰
设计模式10——原型模式(protype)
2026/10/22 1:13:41 网站建设 项目流程

原型模式提出的背景

在软件开发中,对象的创建方式往往直接影响系统的扩展性和维护成本。传统做法是通过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->prototype=prototype;}voidButton1_Click(){ISplitter*splitter=prototype->clone();splitter->split();}};

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询