简单工厂模式 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;
}

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

posted @ 2015-07-06 08:52  朽木可雕否  阅读(140)  评论(0编辑  收藏  举报