C++设计模式 -> 创建型 -> 抽象工厂(Abstract Factory)
来源:互联网 发布:网络直播危害的事例 编辑:程序博客网 时间:2024/05/17 04:49
抽象工厂模式(Abstract Factory)
——————— 抽象工厂 | 具体工厂 ————————–
——————— 抽象产品 | 具体产品 ————————–
逻辑
头文件
Base_Factory.h
#ifndef FACTORY_H#define FACTORY_H#include "Base_Product.h"/* 抽象工厂 */class Base_Factory{public: enum FACTORY_TYPE { BENZ_FACTORY, /* 奔驰工厂 */ BMW_FACTORY, /* 宝马工厂 */ }; /* 实例化具体工厂 */ static bool Base_Factory::Create_Factory(Base_Factory*& base_factory_index, FACTORY_TYPE factory); /* 生产汽车 */ virtual Base_Car* Create_Car() = 0; /* 生产自行车 */ virtual Base_Bike* Create_Bike() = 0;protected:private:};#endif // FACTORY_H
Concrete_Factory.h
#ifndef CONCRETE_FACTORY_H#define CONCRETE_FACTORY_H#include "Base_Factory.h"#include "concrete_product.h"/* 奔驰工厂 */class Benz_Factory : public Base_Factory{public: Base_Car* Create_Car(){ return new Benz_Car; } Base_Bike* Create_Bike(){ return new Benz_Bike; }protected:private:};/* 宝马工厂 */class Bmw_Factory : public Base_Factory{public: Base_Car* Create_Car(){ return new Bmw_Car; } Base_Bike* Create_Bike(){ return new Bmw_Bike; }protected:private:};#endif // CONCRETE_FACTORY_H
Base_Product.h
#ifndef Produce_H#define Produce_H#include <string>using namespace std;// 抽象汽车类class Base_Car{public: virtual string Produce_Car() = 0; // 生产汽车protected:private:};// 抽象自行车类class Base_Bike{public: virtual string Produce_Bike() = 0; // 生产自行车protected:private:};#endif // Produce_H
Concrete_Product.h
#ifndef CONCRETE_Produce_H#define CONCRETE_Produce_H#include "Base_Product.h"/********** 汽车 **********/// 奔驰class Benz_Car : public Base_Car{public: string Produce_Car(){ return " Benz Car "; }protected:private:};// 宝马class Bmw_Car : public Base_Car{public: string Produce_Car(){ return " Bmw Car "; }protected:private:};/********** 自行车 **********/// 奔驰class Benz_Bike : public Base_Bike{public: string Produce_Bike(){ return " Benz Bike "; }protected:private:};// 宝马class Bmw_Bike : public Base_Bike{public: string Produce_Bike(){ return " Bmw Bike "; }protected:private:};#endif // CONCRETE_Produce_H
源文件
create_factory.cpp
#include "Base_Factory.h"#include "concrete_factory.h"/* 实例具体工厂 */bool Base_Factory::Create_Factory(Base_Factory*& base_factory_index, FACTORY_TYPE factory){ switch (factory) { // 奔驰工厂 case FACTORY_TYPE::BENZ_FACTORY: base_factory_index = new Benz_Factory; break; // 宝马工厂 case FACTORY_TYPE::BMW_FACTORY: base_factory_index = new Bmw_Factory; break; default: return false; } return true;}
main.cpp
#include "Base_Factory.h"#include "Base_Product.h"#include <iostream>using namespace std;#ifndef SAFE_DELETE#define SAFE_DELETE(index) { if(index){delete(index); (index)=NULL;} }#endifint main(){ Base_Factory* base_factory_index = NULL; Base_Car* car_index = NULL; Base_Bike* bike_index = NULL; // 奔驰 Base_Factory::Create_Factory(base_factory_index, Base_Factory::FACTORY_TYPE::BENZ_FACTORY); car_index = base_factory_index->Create_Car(); bike_index = base_factory_index->Create_Bike(); cout << car_index->Produce_Car() << endl; cout << bike_index->Produce_Bike() << endl; SAFE_DELETE(car_index); SAFE_DELETE(bike_index); SAFE_DELETE(base_factory_index); // 宝马 Base_Factory::Create_Factory(base_factory_index, Base_Factory::FACTORY_TYPE::BMW_FACTORY); car_index = base_factory_index->Create_Car(); bike_index = base_factory_index->Create_Bike(); cout << car_index->Produce_Car() << endl; cout << bike_index->Produce_Bike() << endl; SAFE_DELETE(car_index); SAFE_DELETE(bike_index); SAFE_DELETE(base_factory_index); getchar(); return 0;}
出处参考:http://blog.csdn.net/liang19890820/article/details/66974516
阅读全文
1 0
- 设计模式-创建型-抽象工厂模式(Abstract Factory)
- C++设计模式 -> 创建型 -> 抽象工厂(Abstract Factory)
- 设计模式-创建型模式之 Abstract Factory(抽象工厂)
- 创建型设计模式之抽象工厂(Abstract Factory)模式
- 【设计模式】创建型模式之抽象工厂Abstract Factory
- [设计模式-创建型]抽象工厂(Abstract Factory)
- Abstract Factory抽象工厂(创建型模式)
- 创建型模式 ABSTRACT FACTORY---抽象工厂
- Abstract Factory 抽象工厂(创建型模式)
- 【创建型模式】abstract factory(抽象工厂)
- 【创建型模式】abstract factory(抽象工厂)
- 创建型-抽象工厂模式(abstract factory)
- 抽象工厂(Abstract Factory)设计模式
- 设计模式-抽象工厂(Abstract Factory)
- 抽象工厂(Abstract Factory)设计模式
- 设计模式-抽象工厂(Abstract Factory)
- 2. 抽象工厂模式(Abstract Factory) ---------- 创建型模式
- 创建型模式2:抽象工厂模式(Abstract Factory)
- 1.7 C# 属性以及参数传递
- 集训第三天(2017/8/2):继续刷搜索题
- [编程题] 序列和
- 用AppleDoc来生成一份你的文档吧
- 【poj1611】The Suspects 【Asia Kaohsiung 2003】
- C++设计模式 -> 创建型 -> 抽象工厂(Abstract Factory)
- Linux之find命令详解
- 现代前端技术解析:现代前端交互框架
- Android基础:异步消息处理机制Handler
- Android 对ListView和RecyclerView的两个BaseAdapter封装分享
- 翻译:Distributed Representations of Words and Phrases and their Compositionality
- iOS 测试 SwiftMonkey :iOS 上的 monkey
- hdu4597
- iconv命令