抽象工厂模式

#include <QCoreApplication>
#include <QDebug>

///  抽象产品球类
class AbstractBall
{
public:
    virtual~AbstractBall();
    
    //抽象方法
    virtual void play() = 0;
};

AbstractBall::~AbstractBall()
{

}

///  具体产品类Basketball
class Basketball : public AbstractBall
{
public:
    Basketball();
    void play() override;
};

void Basketball::play()
{
    qDebug() << "Basketball";
}

Basketball::Basketball()
{
    play();
}

///  具体产品类Football
class Football : public AbstractBall
{
public:
    Football();
    void play() override;
};

void Football::play()
{
    qDebug() << "Football";
}

Football::Football()
{
    play();
}

///  抽象产品球衣类
class AbstractShirt
{
public:
    AbstractShirt();
    virtual~AbstractShirt();
    
    //抽象方法
    virtual void play() = 0;
};

AbstractShirt::AbstractShirt()
{

}

AbstractShirt::~AbstractShirt()
{

}

///  具体产品类BasketShirt
class BasketShirt : public AbstractShirt
{
public:
    BasketShirt();
    void play() override;
};

void BasketShirt::play()
{
    qDebug() << "BasketShirt";
}

BasketShirt::BasketShirt()
{
    play();
}

///  具体产品类FootShirt
class FootShirt : public AbstractShirt
{
public:
    FootShirt();
    void play() override;
};

void FootShirt::play()
{
    qDebug() << "FootShirt";
}

FootShirt::FootShirt()
{
    play();
}


///  抽象工厂类
class AbstractFactory
{
public:
    virtual ~AbstractFactory();
    
    virtual AbstractBall *getBall() = 0;
    virtual AbstractShirt *getShirt() = 0;
};

AbstractFactory::~AbstractFactory()
{

}

/// 具体工厂类BasketballFactory
class BasketballFactory : public AbstractFactory
{
public:
    BasketballFactory();
    
    AbstractBall *getBall();
    AbstractShirt *getShirt();
};

BasketballFactory::BasketballFactory()
{
    qDebug()<< "BasketballFactory";
}

AbstractBall *BasketballFactory::getBall()
{
    return new Basketball;
}

AbstractShirt *BasketballFactory::getShirt()
{
    return new BasketShirt;
}


/// 具体工厂类FootballFactory
class FootballFactory : public AbstractFactory
{
public:
    FootballFactory();
    ~FootballFactory();
    
    AbstractBall *getBall();
    AbstractShirt *getShirt();
};

FootballFactory::FootballFactory()
{
    qDebug()<< "FootballFactory";
}

FootballFactory::~FootballFactory()
{

}

AbstractBall *FootballFactory::getBall()
{
    return new Football;
}

AbstractShirt *FootballFactory::getShirt()
{
    return new FootShirt;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    
    qDebug()<< "抽象工厂模式";
    
    //定义工厂类对象和产品类对象
    AbstractFactory *factory = nullptr;
    AbstractBall *ball = nullptr;
    AbstractShirt *shirt = nullptr;
    
    factory = new BasketballFactory;
    ball = factory->getBall();
    shirt = factory->getShirt();
    
    factory = new FootballFactory;
    ball = factory->getBall();
    shirt = factory->getShirt();

    return a.exec();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值