设计模式Before-after之简单工厂模式

来源:互联网 发布:郑爽 倪妮 知乎 编辑:程序博客网 时间:2024/04/29 19:14

before.cxx

#include <iostream>#include <string>class Apple {public:void sayHello(void) {std::cout << "Hello, I'm a apple." << std::endl;}};class Banana {public:void sayHello(void) {std::cout << "Hello, I'm a banana." << std::endl;}};class Pear {public:void sayHello(void) {std::cout << "Hello, I'm a pear." << std::endl;}};int main(void) {Apple apple;apple.sayHello();// Banana banana;// banana.sayHello();// Pear pear;// pear.sayHello();return 0;}


after.cxx

#include <iostream>#include <string>#include "config.hxx"class Fruit {public:virtual void sayHello(void) = 0;};class Apple: public Fruit {void sayHello(void) {std::cout << "Hello, I'm a apple." << std::endl;}};class Banana: public Fruit {public:void sayHello(void) {std::cout << "Hello, I'm a banana." << std::endl;}};class Pear: public Fruit {public:void sayHello(void) {std::cout << "Hello, I'm a pear." << std::endl;}};class FruitFactory {public:Fruit *createFruit(const std::string &fruitName) {Fruit *fruit;if (!fruitName.compare("Apple")) {fruit = new Apple();} else if (!fruitName.compare("Banana")) {fruit = new Banana();} else if (!fruitName.compare("Pear")) {fruit = new Pear();} else {throw std::invalid_argument("invalid fruit name: " + fruitName);}return fruit;}};int main(void) {try {FruitFactory fruitFactory;Fruit *fruit = fruitFactory.createFruit(_FRUIT_NAME_);fruit->sayHello();delete fruit;} catch(const std::exception &e) {std::cerr << e.what() << std::endl;}return 0;}

config.hxx

#define _FRUIT_NAME_ "Apple"// #define _FRUIT_NAME_ "Banana"// #define _FRUIT_NAME_ "Pear"



0 0