设计模式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;}
#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
- 设计模式Before-after之简单工厂模式
- 设计模式Before-after之工厂方法模式
- 设计模式Before-after之抽象工厂模式
- 设计模式Before-after之原型模式
- 设计模式Before-after之适配器模式
- 设计模式Before-after之组合模式
- 设计模式Before-after之装饰模式
- 设计模式Before-after之代理模式
- 设计模式Before-after之建造者模式
- 设计模式Before-after之桥接模式
- 设计模式Before-after之单例模式
- 设计模式Before-after之享元模式
- 设计模式 之简单工厂+ 工厂模式
- 设计模式之简单工厂设计模式
- 设计模式之简单工厂模式,工厂模式,策略模式
- 设计模式 之 简单工厂
- 设计模式之简单工厂
- 设计模式之简单工厂
- 老公是个二货,总能逗笑我
- 推荐系统中协同过滤算法实现分析
- Java程序综合案例:教务处管理系统之学生档案管理模块
- Linux上最优秀的数据恢复工具
- 浅谈shutdown()和close()的区别
- 设计模式Before-after之简单工厂模式
- [C#] 委托与方法组
- Flume 中文件channel VS 内存channel (File Channel VS Memory Channel)
- 如果无聊,那就开开玩笑损损人
- JPA与Hibernate的优缺点
- JNIEnv在C和C++中的调用方式
- golang, methods on values or pointers?
- Service的简介和启动方式
- Web.config之appsettings的另类使用