美文网首页
抽象工厂

抽象工厂

作者: szn好色仙人 | 来源:发表于2019-03-19 20:18 被阅读0次

    动机

    • 在软件系统中,经常面临一系列相互依赖的对象的创建工作。同时由于需求的变化,往往存在更多系列对象的创建工作

    定义

    • 提供一个接口,让该接口负责创建一系列相关或者相互依赖的对象,无需指定它们具体的类

    要点

    • 如果没有应对多系列对象构建的需求变化,则没有必要使用抽象工厂模式,这时候使用简单的工厂完全可以
    • 系列对象指的是在某一特定系列下的对象之间有相互依赖、作用的关系。不同系列的对象之间不能相互依赖
    • 抽象工厂模式主要在于应对新系列的需求变动。缺点在于难以应对新对象的需求变动

    示例

    #include <cstdio>
    
    
    //CBasePrint 与 CBaseDeal 是具有关联关系的类,经常需要一起被创建
    
    
    class CBasePrint
    {
    public:
        virtual ~CBasePrint() {}
        virtual void Print() = 0;
    };
    class CChild_Print_0 : public CBasePrint
    {
    public:
        virtual void Print() { printf("P 0\n"); }
    };
    class CChild_Print_1 : public CBasePrint
    {
    public:
        virtual void Print() { printf("P 1\n"); }
    };
    
    
    class CBaseDeal
    {
    public:
        virtual ~CBaseDeal() {}
        virtual void Deal() = 0;
    };
    class CChild_Deal_0 : public CBaseDeal
    {
    public:
        virtual void Deal() { printf("D 0\n"); }
    };
    class CChild_Deal_1 : public CBaseDeal
    {
    public:
        virtual void Deal() { printf("D 1\n"); }
    };
    
    
    //抽象工厂,负责一系列相关对象的创建工作
    class CFactoryBase
    {
    public:
        virtual ~CFactoryBase() {}
    
        virtual CBasePrint* CreatePrint() = 0;
        virtual CBaseDeal* CreateDeal() = 0;
    };
    class CFactory_0
    {
    public:
        virtual CBasePrint* CreatePrint() { return new CChild_Print_0; }
        virtual CBaseDeal* CreateDeal() { return new CChild_Deal_0; }
    };
    class CFactory_1
    {
    public:
        virtual CBasePrint* CreatePrint() { return new CChild_Print_1; }
        virtual CBaseDeal* CreateDeal() { return new CChild_Deal_1; }
    };
    
    
    int main()
    {
        CFactory_0 Factory0;
        CFactory_1 Factory1;
    
        Factory0.CreatePrint()->Print();    //P 0
        Factory0.CreateDeal()->Deal();      //D 0
    
        Factory1.CreatePrint()->Print();    //P 1
        Factory1.CreateDeal()->Deal();      //D 1
    
        return 0;
    }
    

    https://www.bilibili.com/video/av24176315/?p=9

    相关文章

      网友评论

          本文标题:抽象工厂

          本文链接:https://www.haomeiwen.com/subject/owznmqtx.html