创建型模式 简单工厂模式
/** * 创建型模式 简单工厂模式 * 简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 * * 1.工厂(Creator)角色 * 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。 * 2.抽象(Product)角色 * 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。 * 3.具体产品(Concrete Product)角色 * 简单工厂模式所创建的具体实例对象 * */ //思想: 核心思想是用一个工厂,来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果。 //元素分析: //抽象产品类:水果类 //具体的水果了:香蕉类、苹果类、梨子 //优点 适用于不同情况创建不同的类时 //缺点 客户端必须要知道基类和工厂类,耦合性差 增加一个产品,需要修改工厂类 #include <iostream> class Fruit { public: virtual void getFruit() = 0; ~Fruit() {} }; class Banana: public Fruit { public: virtual void getFruit() override { std::cout << "我是香蕉" << std::endl; } }; class Pear: public Fruit { public: virtual void getFruit() override { std::cout << "我是梨子" << std::endl; } }; class Factory { public: static Fruit * Create(char * name) { Fruit *tmp = nullptr; if (strcmp(name, "banana") == 0) { tmp = new Banana(); } else if (strcmp(name, "pear") == 0) { tmp = new Pear(); } else { std::cout << "不支持" << std::endl; return nullptr; } return tmp; } }; void mytest() { Fruit *fruit = nullptr; fruit = Factory::Create("banana"); if (fruit == nullptr) { std::cout << "创建香蕉失败" << std::endl; } fruit->getFruit(); delete fruit; fruit = nullptr; fruit = Factory::Create("banana"); if (fruit == nullptr) { std::cout << "创建梨子失败" << std::endl; } fruit->getFruit(); delete fruit; fruit = nullptr; return; } int main() { mytest(); system("pause"); return 0; }
时间: 2024-10-13 12:13:25