设计模式之简单工厂(SimpleFactory)

基本的设计模式分类:

创建型模式:负责对象的创建

结构型模式:处理类与对象之间的组合,可以解决继承依赖性的问题

行为型模式:类与对象交互中的职责分配,可以解决组件间如何交互,隔离变化


简单工厂模式(SimpleFactory)

优点:

1.隐藏了对象创建的细节,将产品延迟到子类中实现

2.方便添加新的子类产品,只需要修改工厂类传递的值即可

3.遵循依赖倒转的原则

缺点:

1.要求子类的类型差不多,使用方法都一样

2.违背了开放-封闭原则



代码实现:

SimpleFactory.h

#ifndef SIMPLEFACTORY_H
#define SIMPLEFACTORY_H

namespace SimpleFactory {
enum ClassType
{
    aType = 0,
    bType = 1,
    cType = 2
};

class Base
{
public:
    Base(){}
    ~Base(){}
    virtual void show();
};

class A : public Base
{
public:
    A(){}
    ~A(){}
    void show();
};

class B : public Base
{
public:
    B(){}
    ~B(){}
    void show();
};

class SimpleFactory
{
public:
    Base *CreateFactory(ClassType);
};
}

#endif // SIMPLEFACTORY_H


SimpleFactory.cpp

#include "simplefactory.h"
#include <iostream>

void SimpleFactory::Base::show()
{
    std::cout << "this is Base" << std::endl;
}

void SimpleFactory::A::show()
{
    std::cout << "this is A" << std::endl;

}

void SimpleFactory::B::show()
{
    std::cout << "this is B" << std::endl;
}

SimpleFactory::Base *SimpleFactory::SimpleFactory::CreateFactory(ClassType type)
{
    switch(type)
    {
    case aType:
    {
        return new A;
    }
    case bType :
    {
        return new B;
    }
    case cType:
    {
        return new B;
    }
    default:
    {
        return NULL;
    }
    }
}


main.cpp

#include <iostream>
#include "simplefactory.h"

int main()
{
    SimpleFactory::SimpleFactory factory;
    SimpleFactory::Base *a = factory.CreateFactory(SimpleFactory::aType);
    a->show();

    SimpleFactory::Base *b = factory.CreateFactory(SimpleFactory::bType);
    b->show();

    SimpleFactory::Base *c = factory.CreateFactory(SimpleFactory::cType);
    c->show();
    return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值