简单工厂模式 SimpleFactory

#include<IOSTREAM>

#include <string>





using namespace std;





class Fruit{

public:

    virtual void show()=0;

};



class Apple:public Fruit{

public:

    void show(){

        cout<<"i am an apple"<<endl;

    }

};



class Pear:public Fruit{

public:

    void show(){

        cout<<"i am a pear"<<endl;

    }

};



class SimpleFactory{

public:

    Fruit * getFruit(string type){

        

        if("apple" == type)

            return new Apple();

        if("pear" == type)

            return new Pear();

        //在此处继续添加,多个产品



        //由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;

        //它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。

        // 当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.

        //这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;

        else

            return NULL;

    }

};





int main(int argc, char* argv[])

{

    SimpleFactory factory;

    Fruit * p = factory.getFruit("pear");

    if(p){

        p->show();

        delete p ;

    }

    return 0;

}

 缺点,当有了新产品时,需在原来的代码基础上进行修改,算不得真正的扩展,扩展性很低,而且在原来代码上进行修改时,可能会产生编码错误。

你可能感兴趣的:(factory)