zoukankan      html  css  js  c++  java
  • 设计模式的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)
    ULUA的简洁用法(二)
    开源cocos2d-x编辑器 qco-editor
    u3d tolua + ZeroBraneStudio远程调试
    ULUA的简洁用法
    OpenGL顶点数据传输速度优化
    在do while语句中使用continue的误解
    cocos2d-x 3D shader的纹理坐标是上下颠倒的
    使用ndk-gdb调试android native程序
    OpenSSL中AES加密的用法
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4230118.html
Copyright © 2011-2022 走看看