• 设计模式的C++实现 2.工厂模式


    工厂模式,实例化对象,用工厂方法取代new操作。

    工厂模式基本与简单工厂模式差点儿相同,简单工厂中每次加入一个子类必须在工厂类中加入一个推断分支,这违背了开闭原则。而工厂模式的解决方法是将简单工厂中的每一个推断都生成一个工厂子类,工厂子类位于工厂类抽象和产品类实现之间,实际依旧属于实现。工厂类中的为抽象的接口,开闭原则要不改动接口,仅仅改动实现,则这里工厂子类是实现,加入工厂子类及其代码没有改动抽象的接口,即达到了开闭原则。

    缺点是产品多了之后,要维护的量就添加了,会出现很多工厂子类,尽管工厂子类仅仅进行创建产品的工作。没添加一个产品就要添加一个工厂子类,添加工作量。

    工厂模式仅仅是简单工厂的一点优化,使其遵循了开闭原则。应用场景也与简单工厂一样,在子类数量不多的情况下。

    工厂模式的简单实现:

    class bass{
    public:
    	virtual void fun() = 0;
    	bass(){}
    	virtual ~bass(){}
    
    };
    class A : public bass{
    public:
    	virtual void fun(){cout<< "A"<<endl;}
    	A(){}
    	virtual ~A(){}
    };
    class B : public bass{
    public:
    	virtual void fun(){cout<< "B"<<endl;}
    	B(){}
    	virtual ~B(){}
    };
    class AbstractFactory{
    public:
    	AbstractFactory(){};
    	virtual ~AbstractFactory();
    	virtual bass* createProduct() = 0;
    };
    class FactoryA:public  AbstractFactory{
    	FactoryA(){}
    	~FactoryA(){}
    	A* createProduct(){return new A();}
    };
    class FactoryB:public  AbstractFactory{
    public:
    	FactoryB(){}
    	~FactoryB(){}
    	B* createProduct(){return new B();}
    };



  • 相关阅读:
    迟到感悟
    让自己记住吧。
    hadoop 数据抽取
    指标导入常用函数
    linux shell中单引号、双引号、反引号、反斜杠的区别
    简单解说Linux命令输出与命令替换
    生成表结构
    ASP.NET MVC3在Visual Studio 2010中的变化
    主键自增归0
    解决包含已存在的php文件,但提示就是找不到的问题
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4230118.html
Copyright © 2020-2023  润新知