AcWing
  • 首页
  • 题库
  • 题解
  • 分享
  • 问答
  • 活动
  • 应用
  • 吐槽
  • 登录/注册

工厂模式

作者: 作者的头像   贺谦 ,  2021-01-11 14:42:40 ,  阅读 48


1


  • 简单工厂模式
#include <iostream>

using namespace std;

enum CpuType
{
    A, B
};

class CPU
{
public:
    virtual void work() = 0;
};

class CpuA : public CPU
{
public:
    virtual void work()
    {
        cout << "CpuA work()" << endl;
    }
};

class CpuB : public CPU
{
public:
    virtual void work()
    {
        cout << "CpuB work()" << endl;
    }
};

class Facty
{
public:
    CPU* createCpu(enum CpuType type)
    {
        if (type == A) return new CpuA();
        else if (type == B) return new CpuB();
    }
};

int main()
{
    Facty fty;
    CPU* pcpu = fty.createCpu(A);
    pcpu->work();

    pcpu = fty.createCpu(B);
    pcpu->work();

    return 0;
}
  • 复杂工厂模式
#include <iostream>

using namespace std;

class Cpu
{
public:
    virtual void work() = 0;
};

class CpuA : public Cpu
{
public:
    void work()
    {
        cout << "CpuA work()" << endl;
    }
};

class CpuB : public Cpu
{
public:
    void work()
    {
        cout << "CpuB work()" << endl;
    }
};

class Facty
{
public:
    virtual Cpu* createCpu() = 0;
};

class FactyA : public Facty
{
public:
    Cpu* createCpu()
    {
        return new CpuA;
    }
};

class FactyB : public Facty
{
public:
    Cpu* createCpu()
    {
        return new CpuB;
    }
};

int main()
{
    FactyA ftya;
    Cpu* pcpu = ftya.createCpu();
    pcpu->work();

    FactyB ftyb;
    pcpu = ftyb.createCpu();
    pcpu->work();

    return 0;
}

0 评论

你确定删除吗?

© 2018-2021 AcWing 版权所有  |  京ICP备17053197号-1
联系我们  |  常见问题
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息