前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >创建型之工厂方法模式C++实现

创建型之工厂方法模式C++实现

作者头像
用户9831583
发布2022-06-16 15:05:27
2210
发布2022-06-16 15:05:27
举报
文章被收录于专栏:码出名企路

工厂方法模式:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。“创建与使用相分离”。

优点:

1.用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;

2.在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则;

缺点:

每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,增加了系统的复杂度。

主要角色:

  1. 抽象工厂:提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法 newProduct() 来创建产品。
  2. 具体工厂:主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
  3. 抽象产品:定义了产品的规范,描述了产品的主要特性和功能。
  4. 具体产品:实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间一一对应.

具体示例:

手机厂生产手机,电视厂生产电视

第一步:抽象产品

代码语言:javascript
复制
//抽象产品
class Product
{
    public:
        virtual void show()=0;
};

第二步:具体产品

代码语言:javascript
复制
//具体产品1
class ConProduct1:public Product
{
    public:
        void show()
        {
            cout<<"手机产品生产完成"<<endl;
        }
};
//具体产品2
class ConProduct2:public Product
{
    public:
        void show()
        {
            cout<<"电视产品生产完成"<<endl;
        }
};

第三步:抽象工厂

代码语言:javascript
复制
//抽象工厂类
class Factory
{
    public:
    //此处只能返回一个抽象类的指针,抽象类不能返回实体
        virtual Product* newProduct()=0;
};

第四步:具体工厂

代码语言:javascript
复制
//具体工厂1,实现产品1的生产
class ConFactory1:public Factory
{
    public:
        Product* newProduct()
        {
            cout<<"手机厂生产手机"<<endl;
            return new ConProduct1();
        }
};

//具体工厂2,实现产品2
class ConFactory2:public Factory
{
    public:
        Product* newProduct()
        {
            cout<<"电视厂生产电视"<<endl;
            return new ConProduct2();
        }
};

第五步:主函数

代码语言:javascript
复制
#include "p.h"

int main()
{
    
        Product *P1=new ConProduct1();
        Product *P2=new ConProduct2();
        Factory *PF1=new ConFactory1();
        Factory *PF2=new ConFactory2();
        P1=PF1->newProduct();
        P1->show();
        P2=PF2->newProduct();
        P2->show();

        return 0;
    
}

结果显示:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码出名企路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档