Design/factoryMethod/FactoryMethod.hpp
2024-10-28 14:07:29 +08:00

89 lines
1.7 KiB
C++

/*
* @Description:
* @version:
* @Author: 莫邪
* @Date: 2023-10-08 14:46:44
* @LastEditors: 莫邪
* @LastEditTime: 2023-10-08 14:59:02
*/
#include <memory>
#include <iostream>
class AbstractProduct { //抽象产品
public:
AbstractProduct() {}
virtual void print() = 0;
virtual void play() = 0;
};
class PowerArmor : public AbstractProduct {
public:
PowerArmor() {
print();
play();
}
void print() {
std::cout << "得到一个动力装甲" << std::endl;
}
void play() {
std::cout << "动力装甲因太过脆弱而被损坏" << std::endl;
}
};
class FlyingPowder : public AbstractProduct {
public:
FlyingPowder() {
print();
play();
}
void print() {
std::cout << "得到一个飞路粉" << std::endl;
}
void play() {
std::cout << "飞路粉太香招来苍蝇" << std::endl;
}
};
class Goblins : public AbstractProduct {
public:
Goblins() {
print();
play();
}
void print() {
std::cout << "得到一个哥布林" << std::endl;
}
void play() {
std::cout << "暴躁的哥布林发起了进攻" << std::endl;
}
};
class AbstractFactory {
public :
AbstractFactory() {}
virtual std::shared_ptr<AbstractProduct> getProduct() = 0;
};
class MachineryFactory : public AbstractFactory{
public :
MachineryFactory() {}
std::shared_ptr<AbstractProduct> getProduct() {
return std::make_shared<PowerArmor>();
}
};
class MagicFactory : public AbstractFactory {
public:
MagicFactory() {}
std::shared_ptr<AbstractProduct> getProduct() {
return std::make_shared<FlyingPowder>();
}
};
class Greenfactory : public AbstractFactory {
public:
Greenfactory() {}
std::shared_ptr<AbstractProduct> getProduct() {
return std::make_shared<Goblins>();
}
};