设计模式8——工厂方法(Factory Method)

发布时间:2026/9/23 8:45:47
设计模式8——工厂方法(Factory Method) 一、动机在软件系统中经常面临着创建对象的工作由于需求的变化需要创建的对象的具体类型经常变化。Product*pnewProductA();代码直接写死new ProductA如果以后新增产品ProductB要到处改业务代码业务代码和具体类强耦合。二、模式定义定义一个用于创建对象的接口让子类决定实例化哪一个类。Factory Method使得一个类的实例化延迟到子类。——《设计模式》GoF三、例子#includeiostream// 抽象产品classProduct{public:virtual~Product()default;virtualvoidshow()0;};// 具体产品AclassProductA:publicProduct{public:voidshow()override{std::cout产品A\n;}};// 具体产品BclassProductB:publicProduct{public:voidshow()override{std::cout产品B\n;}};// 【抽象工厂】工厂方法纯虚函数createProductclassFactory{public:virtual~Factory()default;virtualProduct*createProduct()0;// 工厂方法};// A的工厂只生产ProductAclassFactoryA:publicFactory{public:Product*createProduct()override{returnnewProductA();}};// B的工厂只生产ProductBclassFactoryB:publicFactory{public:Product*createProduct()override{returnnewProductB();}};// 业务代码只依赖抽象Factory、抽象Product不碰new具体类intmain(){Factory*facnewFactoryA();Product*objfac-createProduct();obj-show();deleteobj;deletefac;return0;}五、总结Factory Method模式用于隔离类对象的使用者和具体类型之间的耦合关系。面对一个经常变化的具体类型紧耦合关系会导致软件的脆弱。Factor Method模式通过面向对象的手法将所要创建的具体对象工作延迟到子类从而实现一种扩展(而非更改)的策略较好的解决了这种紧耦合关系。Factor Method模式解决“单个对象”的需求变化。缺点在于要求创建方法/参数相同。多说一点其实是可以在第一种方法的框架类定义一个文件分割的基类指针构造函数中传入文件分割的继承类对象不过这就不是工厂方法了而是我们之前说过的模板方法。类似的可以使用表驱动的方式去解决这种问题。事件映射函数指针的方式.

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询