设计模式——工厂方法模式(C++)
来源:互联网 发布:域名cc是外国的吗? 编辑:程序博客网 时间:2024/05/16 12:23
/*****************************************Copyright (c) 2016 Jingshuang Hu@filename:main.cpp@datetime:2016.09.11@author:HJS@e-mail:jingshuang_hu@163.com@blog:http://blog.csdn.net/hujingshuang*****************************************/#include "Factory.h"#include "Product.h"#include "concreteFactory.h"#include "concreteProduct.h"#include <iostream>using namespace std;// 工厂方法模式:抽象工厂、具体工厂、抽象产品、具体产品// 这种模式,一个具体产品对应一个具体工厂,由于基类产品和基类工厂是抽象出来的,所以该模式能够很好的对"修改关闭,扩展开放"// 但是,当具体产品种类非常多的时候,与其相对应的具体工厂就会非常多,因此会造成类的数量成倍增长,这是不好的现象。int main() { Factory* factory1 = new concreteFactoryA(); Product* product1 = factory1->creator(); product1->property1(); product1->property2(); product1->property3(); Factory* factory2 = new concreteFactoryB(); Product* product2 = factory2->creator(); product2->property1(); product2->property2(); product2->property3(); Factory* factory3 = new concreteFactoryC(); Product* product3 = factory3->creator(); product3->property1(); product3->property2(); product3->property3(); system("pause"); return 0;}
抽象工厂类:
/*****************************************Copyright (c) 2016 Jingshuang Hu@filename:Factory.h@datetime:2016.09.11@author:HJS@e-mail:jingshuang_hu@163.com@blog:http://blog.csdn.net/hujingshuang*****************************************/#ifndef _FACTORY_H#define _FACTORY_H#include "Product.h"class Factory {public: virtual Product* creator() = 0;};#endif // _FACTORY_H
/*****************************************Copyright (c) 2016 Jingshuang Hu@filename:Factory.cpp@datetime:2016.09.11@author:HJS@e-mail:jingshuang_hu@163.com@blog:http://blog.csdn.net/hujingshuang*****************************************/#include "Factory.h"#include <iostream>Product* Factory::creator() { return NULL;}抽象产品类:
/*****************************************Copyright (c) 2016 Jingshuang Hu@filename:Product.h@datetime:2016.09.11@author:HJS@e-mail:jingshuang_hu@163.com@blog:http://blog.csdn.net/hujingshuang*****************************************/#ifndef _PRODUCT_H#define _PRODUCT_Hclass Product {public: virtual void property1() = 0; virtual void property2() = 0; virtual void property3() = 0;};#endif // _PRODUCT_H
/*****************************************Copyright (c) 2016 Jingshuang Hu@filename:Product.cpp@datetime:2016.09.11@author:HJS@e-mail:jingshuang_hu@163.com@blog:http://blog.csdn.net/hujingshuang*****************************************/#include "Product.h"void Product::property1() {}void Product::property2() {}void Product::property3() {}具体工厂类:
/*****************************************Copyright (c) 2016 Jingshuang Hu@filename:concreteFactory.h@datetime:2016.09.11@author:HJS@e-mail:jingshuang_hu@163.com@blog:http://blog.csdn.net/hujingshuang*****************************************/#ifndef _CONCRETEFACTORY_H#define _CONCRETEFACTORY_H#include "Factory.h"#include "Product.h"class concreteFactoryA : public Factory { virtual Product* creator();};class concreteFactoryB : public Factory { virtual Product* creator();};class concreteFactoryC : public Factory { virtual Product* creator();};#endif // _COMCRETEFACTORY_H
/*****************************************Copyright (c) 2016 Jingshuang Hu@filename:concreteFactory.cpp@datetime:2016.09.11@author:HJS@e-mail:jingshuang_hu@163.com@blog:http://blog.csdn.net/hujingshuang*****************************************/#include "Product.h"#include "concreteFactory.h"#include "concreteProduct.h"Product* concreteFactoryA::creator() { return new concreteProductA();}Product* concreteFactoryB::creator() { return new concreteProductB();}Product* concreteFactoryC::creator() { return new concreteProductC();}
具体产品类:
/*****************************************Copyright (c) 2016 Jingshuang Hu@filename:concreteProduct.h@datetime:2016.09.11@author:HJS@e-mail:jingshuang_hu@163.com@blog:http://blog.csdn.net/hujingshuang*****************************************/#ifndef _CONCRETEPRODUCT_H#define _CONCRETEPRODUCT_H#include "Product.h"#include <iostream>class concreteProductA : public Product {private: std::string name;public: concreteProductA(); virtual void property1(); virtual void property2(); virtual void property3();};class concreteProductB : public Product {private: std::string name;public: concreteProductB(); virtual void property1(); virtual void property2(); virtual void property3();};class concreteProductC : public Product {private: std::string name;public: concreteProductC(); virtual void property1(); virtual void property2(); virtual void property3();};#endif // _CONCRETEPRODUCT_H
/*****************************************Copyright (c) 2016 Jingshuang Hu@filename:concreteProduct.cpp@datetime:2016.09.11@author:HJS@e-mail:jingshuang_hu@163.com@blog:http://blog.csdn.net/hujingshuang*****************************************/#include "concreteProduct.h"#include <iostream>#include <string>using namespace std;concreteProductA::concreteProductA() { name = "A";}void concreteProductA::property1() { cout << name << "属性1" << endl;}void concreteProductA::property2() { cout << name << "属性2" << endl;}void concreteProductA::property3() { cout << name << "属性3" << endl;}// concreteProductB::concreteProductB() { name = "B";}void concreteProductB::property1() { cout << name << "属性1" << endl;}void concreteProductB::property2() { cout << name << "属性2" << endl;}void concreteProductB::property3() { cout << name << "属性3" << endl;}// concreteProductC::concreteProductC() { name = "C";}void concreteProductC::property1() { cout << name << "属性1" << endl;}void concreteProductC::property2() { cout << name << "属性2" << endl;}void concreteProductC::property3() { cout << name << "属性3" << endl;}
1 0
- 设计模式——工厂方法模式(C++)
- 设计模式——工厂模式(方法模式)
- 设计模式之简单工厂,工厂方法模式(c++)
- 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)
- 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)
- Qt设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)
- 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)
- 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)
- 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)
- 设计模式系列——三个工厂模式(简单工厂模式,工厂方法模式,抽象工厂模式)
- 设计模式—工厂方法
- 设计模式—工厂方法
- iOS常用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)
- iOS常用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)
- 设计模式——抽象工厂模式、工厂方法模式
- Java设计模式—工厂方法模式&抽象工厂模式
- Java设计模式—工厂方法模式&抽象工厂模式
- 设计模式——工厂方法模式
- Jquery 万行代码解析之路(二)—jquery构造函数init
- 学习日记20160910
- [Jsoi2013]游戏中的学问 解题报告
- Mac下Exception 'yii\db\Exception' with message 'SQLSTATE[HY000] [2002] No such file or directory'
- Android语音识别--RecognizerIntent用法
- 设计模式——工厂方法模式(C++)
- 我的大创项目《虚拟化学实验室开发与应用》
- Linux运维笔记----Bash Scripts基础I
- andriod 拿手机设备信息 手机IMEI 设备ID等 并http请求
- POJ 2406 Power Strings
- 第二天
- 直接插入排序的思想
- 2016年终总结,新的里程和新的开始
- java中数据类型转换