141 lines
3.9 KiB
C
141 lines
3.9 KiB
C
|
/*******************************************************************
|
|||
|
* Copyright (c) 2022~2023 XMuli All rights reserved.
|
|||
|
* GitHub: https://github.com/XMuli
|
|||
|
* Description: 抽象工厂模式(Abstract Factory)
|
|||
|
* Up产品 up1、up2 两款式产品,Down 有 down1、down2 两款式产品;
|
|||
|
* 每个工厂一次只生产 Up + Down 系列产品,即可组成套装出售;比如
|
|||
|
* AFactory 生产 up1 + down1; BFactory 生产 up2 + down2;
|
|||
|
* CFactory 生产 up1 + down2; 等各种组合
|
|||
|
* See: https://blog.csdn.net/silangquan/article/details/20492293
|
|||
|
******************************************************************/
|
|||
|
#pragma once
|
|||
|
#include <iostream>
|
|||
|
using namespace std;
|
|||
|
|
|||
|
/***************************************************************************
|
|||
|
每一个具体的 Factory 类,都可以创建多款 product,但是每款只能够生成 1 个(对象)
|
|||
|
***************************************************************************/
|
|||
|
|
|||
|
class IUpProduct
|
|||
|
{
|
|||
|
public:
|
|||
|
virtual ~IUpProduct() = default;
|
|||
|
virtual void doSomeThing() = 0;
|
|||
|
};
|
|||
|
|
|||
|
class Up1Product : public IUpProduct
|
|||
|
{
|
|||
|
public:
|
|||
|
virtual ~Up1Product() = default;
|
|||
|
virtual void doSomeThing() override {
|
|||
|
cout << "this is 1 UpProduct, do some thing..." << endl;
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
class Up2Product : public IUpProduct
|
|||
|
{
|
|||
|
public:
|
|||
|
virtual ~Up2Product() = default;
|
|||
|
virtual void doSomeThing() override {
|
|||
|
cout << "this is 2 UpProduct, do some thing..." << endl;
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
class IDownProduct
|
|||
|
{
|
|||
|
public:
|
|||
|
virtual ~IDownProduct() = default;
|
|||
|
virtual void doSomeThing() = 0;
|
|||
|
};
|
|||
|
|
|||
|
class Down1Product : public IDownProduct
|
|||
|
{
|
|||
|
public:
|
|||
|
virtual ~Down1Product() = default;
|
|||
|
virtual void doSomeThing() override {
|
|||
|
cout << "this is 1 DownProduct, do some thing..." << endl;
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
class Down2Product : public IDownProduct
|
|||
|
{
|
|||
|
public:
|
|||
|
virtual ~Down2Product() = default;
|
|||
|
virtual void doSomeThing() override {
|
|||
|
cout << "this is 2 DownProduct, do some thing..." << endl;
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
class IFactory
|
|||
|
{
|
|||
|
public:
|
|||
|
virtual ~IFactory() = default;
|
|||
|
virtual IUpProduct* creatorUpProduct() = 0;
|
|||
|
virtual IDownProduct* creatorDownProduct() = 0;
|
|||
|
};
|
|||
|
|
|||
|
class AFactory : public IFactory
|
|||
|
{
|
|||
|
public:
|
|||
|
virtual ~AFactory() = default;
|
|||
|
virtual IUpProduct* creatorUpProduct() override {
|
|||
|
return new Up1Product();
|
|||
|
}
|
|||
|
virtual IDownProduct* creatorDownProduct() override {
|
|||
|
return new Down1Product();
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
class BFactory : public IFactory
|
|||
|
{
|
|||
|
public:
|
|||
|
virtual ~BFactory() = default;
|
|||
|
virtual IUpProduct* creatorUpProduct() override {
|
|||
|
return new Up2Product();
|
|||
|
}
|
|||
|
virtual IDownProduct* creatorDownProduct() override {
|
|||
|
return new Down2Product();
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
class CFactory : public IFactory
|
|||
|
{
|
|||
|
public:
|
|||
|
virtual ~CFactory() = default;
|
|||
|
virtual IUpProduct* creatorUpProduct() override {
|
|||
|
return new Up1Product();
|
|||
|
}
|
|||
|
virtual IDownProduct* creatorDownProduct() override {
|
|||
|
return new Down2Product();
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
//int main()
|
|||
|
//{
|
|||
|
// AFactory aFactory;
|
|||
|
// aFactory.creatorUpProduct()->doSomeThing();
|
|||
|
// aFactory.creatorDownProduct()->doSomeThing();
|
|||
|
// cout << endl;
|
|||
|
//
|
|||
|
// BFactory bFactory;
|
|||
|
// bFactory.creatorUpProduct()->doSomeThing();
|
|||
|
// bFactory.creatorDownProduct()->doSomeThing();
|
|||
|
// cout << endl;
|
|||
|
//
|
|||
|
// CFactory cFactory;
|
|||
|
// cFactory.creatorUpProduct()->doSomeThing();
|
|||
|
// cFactory.creatorDownProduct()->doSomeThing();
|
|||
|
// cout << endl;
|
|||
|
// return 0;
|
|||
|
//}
|
|||
|
|
|||
|
/*****************************打印结果*******************************
|
|||
|
this is 1 UpProduct, do some thing...
|
|||
|
this is 1 DownProduct, do some thing...
|
|||
|
|
|||
|
this is 2 UpProduct, do some thing...
|
|||
|
this is 2 DownProduct, do some thing...
|
|||
|
|
|||
|
this is 1 UpProduct, do some thing...
|
|||
|
this is 2 DownProduct, do some thing...
|
|||
|
******************************************************************/
|