码迷,mamicode.com
首页 > 其他好文 > 详细

简单工厂模式

时间:2020-03-22 11:01:50      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:ret   ring   fine   添加   苹果   code   工厂   直接   ace   

用户提供一个标签,工厂通过一个函数来判断。比如用户提供一个苹果,水果工厂就得根据水果生成器(函数)来创建一个苹果。这些水果的类在外面是已经写好了的。

这个水果生成器直接返回一个水果种类的指针。例子如下。

#define  _CRT_SECURE_NO_WARNINGS 
#include <iostream>

using namespace std;

//抽象的水果类
class Fruit
{
public:
    virtual void getName() = 0;
};

class Apple :public Fruit
{
public:
    virtual void getName() {
        cout << "我是苹果" << endl;
    }
 };

class Banana :public Fruit
{
public:
    virtual void getName() {
        cout << "我是香蕉" << endl;
    }
};

//添加一个新产品 鸭梨
class Pear :public Fruit
{
public:
    virtual void getName() {
        cout << "我是鸭梨" << endl;
    }
};

//工厂
class Factory {
public:
    //水果生产器
    Fruit * createFruit(string kind) {
        Fruit *fruit = NULL;

        if (kind == "apple") {
            fruit =  new Apple;
        }
        else if(kind == "banana"){
            fruit =  new Banana;
        }
        //添加一个鸭梨   修改了工厂的方法, 违背了开闭原则
        else if (kind == "pear") {
            fruit = new Pear;
        }
        return fruit;
    }
};

int main(void)
{
    //人们是跟工厂打交道
    Factory *factory = new Factory; //创建一个工厂
    //给我来一个苹果
    Fruit *apple = factory->createFruit("apple");

    apple->getName();


    Fruit *banana = factory->createFruit("banana");
    banana->getName();

    Fruit *pear = factory->createFruit("pear");

    delete apple;
    delete banana;
    delete factory;

    
    return 0;
}

 

简单工厂模式

标签:ret   ring   fine   添加   苹果   code   工厂   直接   ace   

原文地址:https://www.cnblogs.com/strangemonkey/p/12544103.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!