简单工厂模式

一种创建型模式, 对各子类的实例化通过工厂类进行封装.

说明

  • 简单工厂模式, 又叫做静态工厂模式(static Factory Method)
  • 属于创建型模式. 其不属于23种GOF设计模式
  • 对外可见的类:
    • 工厂类
    • 抽象父类
  • 实质: 由一个工厂类根据传入的参数来动态的决定该创建的实例类型. 在使用时通过父类指针来调用虚函数. 从而实现多态.

优缺点

优点

  • 对外隐藏了对象的创建过程. 外界只负责消费对象.

缺点

  • 因为创建对象集中在了工厂类中, 违背了高内聚责任分配原则.

使用场景

  • 一般在简单的场景下使用.
  • 工厂类负责创建的对象类型较少时.

示例

//父类
class Language{
public:
    virtual void whatIsIt(void)=0;
};

//子类1
class Chinese : public Language {
public:
    void whatIsIt(void) { cout << "is Chinese" << endl; }
};

//子类2
class English: public Language {
public:
    void whatIsIt(void) { cout << "is English" << endl; }
};

//子类3
class Japanese: public Language {
public:
    void whatIsIt(void) { cout << "is Japanese" << endl; }
};

//工厂类
class Factory {
public: 
    //根据传入参数, 创建不同类型的子类实例, 并以父类指针类型传出
    static Language * makeLanguage(const string &language) {
        if (language == "Chinese") {
            return new Chinese();
        } else if (language == "English") {
            return new English();
        } else if (language == "Japanese") {
            return new Japanese();
        }
    }
};

{    //使用 (需对外暴露 父类 及 工厂类 )
    Language *p = Factory::makeLanguage("Chinese");
    p->whatIsIt();      //结果为: "is Chinese"

    Language *q = Factory::makeLanguage("English");
    q->whatIsIt();      //结果为: "is English"

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值