Qt Abstract Factory

简介

提供一个接口以创建一系列相关或相互依赖的对象,而无须指定他们具体的类。

适用性

1.一个系统要独立于他的产品的创建,组合和表示

2.一个系统要由多个产品系列中的一个来配置

3.要强调一系列相关的产品对象的设计以便进行联合使用

4.提供一个产品类库,但只想显示他们的接口而不是实现

æ½è±¡å·¥å模å¼UMLå¾

 

根据上图我们来总结一下抽象工厂的使用方法

使用方法

1.首先我们要明确自己需要创建什么产品,比如我们是生产橡皮和笔的代工厂,A工厂和B工厂来找我们贴牌。

   这时候我们要的产品就是橡皮和笔,具体到实例就是A工厂的橡皮,A工厂的笔以及B工厂的橡皮B工厂的笔。

2.抽象出产品的基类 并构建 出各个工厂对应的产品


class Pen{
public:
    Pen(){}
    virtual ~Pen(){}
    virtual void showPen() = 0;
};

class PenA:public Pen{
public:
    PenA(){}
    virtual~PenA(){}
    void showPen(){
        qDebug()<<"A工厂的笔";
    }
};
class PenB:public Pen{
public:
    PenB(){}
    virtual~PenB(){}
    void showPen(){
        qDebug()<<"B工厂的笔";
    }
};

class Eraser{
public:
    Eraser(){}
    virtual ~Eraser(){}
    virtual void showEraser() = 0;
};
class EraserA:public Eraser{
public:
    EraserA(){}
    ~EraserA(){}
  void  showEraser(){
        qDebug()<<"A工厂的橡皮";
    }
};

class EraserB:public Eraser{
public:
    EraserB(){}
    ~EraserB(){}
    void showEraser(){
        qDebug()<<"B工厂的橡皮";
    }
};

3.好的,我们现在知道我们要生产什么产品了,现在我们要制造他们。我们需要一个对应A产品的流水线(工厂)和对应B产品的流水线(工厂)他们同时继承于我们抽象出来的流水线类(工厂)。

class Factory{
public:
    Factory(){}
    virtual~Factory(){}
    virtual  Pen* createPen()=0;
    virtual  Eraser* createEraser()=0;
};

class AFactory:public Factory{
public:
    AFactory(){}
    ~AFactory(){}
    Pen* createPen(){
        return  new PenA();
    }
    Eraser * createEraser(){
        return new EraserA();
    }
};

class BFactory:public Factory{
public:
    BFactory(){}
    ~BFactory(){}
    Pen* createPen(){
        return  new PenB();
    }
    Eraser * createEraser(){
        return new EraserB();
    }
};

调用方式

1.给A工厂交付产品

    Factory  * pFactory =  new AFactory();
    Pen* pPen = pFactory->createPen();
    Eraser*pEraser = pFactory->createEraser();
    pPen->showPen();
    pEraser->showEraser();
    delete pEraser;
    delete pPen;
    delete pFactory;

2.给B工厂交付产品

    Factory*pFactory = new BFactory();
    Pen*pPen = pFactory->createPen();
    Eraser*pEraser = pFactory->createEraser();
    pPen->showPen();
    pEraser->showEraser();
    delete pFactory;
    delete pPen;
    delete pEraser;

源码已上传:

https://download.csdn.net/download/yonggandess/12642022

参考:

 设计模式-可复用面向对象软件的基础

UML图参考:

https://blog.csdn.net/konglongdanfo1/article/details/83380770 

你可能感兴趣的:(Qt基础)