工厂模式

工厂模式的使用情景
1、客户类不关心使用哪个具体类,只关心该接口所提供的功能
2、创建过程比较复杂,比如需要初始化其他关联的资源类,服务配置文件等
3、接口有很多具体实现或抽象类有很多具体子类时,你可能需要为客户代码写一大串if-else 
    逻辑来决定运行时使用哪个具体实现或者具体子类
4、不希望给客户程序暴露过多此类的内部结构,隐藏这些细节可以降低耦合度。
5、优化性能,比如缓存大对象或者初始或比较耗时的对象


工厂模式属于创建型模式,大致可分为三类,简单工厂模式、工厂方法模式、抽象工厂模式。



简单工厂模式:在工厂类中做判断,从而创造响应的产品。

简单工厂模式UML图



enmu CTYPE {COREA, COREB};//枚举

class SingleCore{
public:
    virtual void Show() = 0;//纯虚函数
};

class SingleCoreA: public SingleCore{
public:
    void show(){ cout << "SingleCore A" << endl; }
};

class SingleCoreB: public SingleCore{
public:
    void Show(){ cout << "SingleCore B" << endl; }
};

class Factory{
public:
    SingleCore* CreateSingleCore(enum CTYPE ctype){
        if(ctype == COREA)
            return new SingleCoreA();//生产核A
        else if(ctype == COREB)
            return new SingleCoreB();//生产核B
        else
            return NULL
    }
};


工厂方法模式:指定义一个用于创建对象的接口,让子类决定实例化哪一个类。

工厂方法模式UML图


class SingleCore{
public:
    virtual void Show() = 0;//纯虚函数
};

class SingleCoreA: public SingleCore{
public:
    void show(){ cout << "SingleCore A" << endl; }
};

class SingleCoreB: public SingleCore{
public:
    void Show(){ cout << "SingleCore B" << endl; }
};

class Factory{
public:
    virtual SingleCore* CreateSingleCore() = 0;
};

//生产A核的工厂
class FactoryA{
public:
    SingleCoreA* CreateSingleCore(){ return new SingleCoreA; }
};
//生产B核的工厂
class FactoryB{
public:
    SingleCoreB* CreateSingleCore(){ return new SingleCoreB; }
};


抽象工厂模式:工厂A只生产A型号的产品。。。。。

抽象工厂模式UML图


class SingleCore{
public:
    virtual void Show() = 0;//纯虚函数
};

class SingleCoreA: public SingleCore{
public:
    void show(){ cout << "SingleCore A" << endl; }
};

class SingleCoreB: public SingleCore{
public:
    void Show(){ cout << "SingleCore B" << endl; }
};


class MultiCore{
public:
    virtual void Show() = 0;
};

class MultiCoreA: public MultiCore{
public:
    void Show(){ cout << "MultiCore A" << endl; }
};

class MultiCoreB: public MultiCore{
public:
    void Show(){ cout << "MultiCore B" << endl; }
};

class Factory{
public:
    virtual SingleCore* CreateSingleCore() = 0;
    virtual MultiCore* CreateMultiCore() = 0;
};

//工厂A,专门用来生产A型号的处理器
class FactoryA{
public:
    SingleCoreA* CreateSingleCore(){ return new SingleCoreA; }
    MultiCoreA* CreateMultiCore(){ return new MultiCoreA; }
};
//工厂B,专门用来生产B型号的处理器
class FactoryB{
public:
    SingleCoreB* CreateSingleCore(){ return new SingleCoreB; }
    MultiCoreB* CreateMultiCore(){ return new MultiCoreB; }
};

























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值