设计模式笔记之---抽象工厂模式
来源:互联网 发布:c语言湖南大学829 编辑:程序博客网 时间:2024/04/29 10:26
抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
抽象工厂模式最大的好处是便于交换产品系列,由于具体工厂类只在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需改变具体的工厂即可使用不同的产品配置。同时,它让具体的创建实例的过程与客户端分离,客户端是通过它们的抽象接口操作实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中,从而完全遵循了开发--封闭原则和依赖倒装原则。
UML类图:
抽象工厂模式基本代码如下:
/********************************************************************filename: AbstractFactory.hcreated:2012-09-24author:firehoodpurpose:firehood 学设计模式之---抽象工厂模式*********************************************************************/#pragma once#include <iostream> using namespace std; // 抽象产品Aclass AbstractProductA{public:AbstractProductA(void){}virtual ~AbstractProductA(void){}};// 具体产品A1,抽象产品A的第一种实现class ConcreteProductA1:public AbstractProductA{public:ConcreteProductA1(void){ cout<<"生产产品A1"<<endl; } virtual ~ConcreteProductA1(void){ cout<<"销毁产品A1"<<endl; } };// 具体产品A2,抽象产品A的第二种实现class ConcreteProductA2:public AbstractProductA{public:ConcreteProductA2(void){ cout<<"生产产品A2"<<endl; } virtual ~ConcreteProductA2(void){ cout<<"销毁产品A2"<<endl; } };// 抽象产品Bclass AbstractProductB{public:AbstractProductB(void){}virtual ~AbstractProductB(void){}};// 具体产品B1,抽象产品B的第一种实现class ConcreteProductB1:public AbstractProductB{public:ConcreteProductB1(void){ cout<<"生产产品B1"<<endl; } virtual ~ConcreteProductB1(void){ cout<<"销毁产品B1"<<endl; } };// 具体产品B2,抽象产品B的第二种实现class ConcreteProductB2:public AbstractProductB{public:ConcreteProductB2(void){ cout<<"生产产品B2"<<endl; } virtual ~ConcreteProductB2(void){ cout<<"销毁产品B2"<<endl; } };// 抽象工厂class AbstractFactory{public:AbstractFactory(void){}virtual ~AbstractFactory(void){}virtual AbstractProductA* CreateProductA() = 0;virtual AbstractProductB* CreateProductB() = 0;};// 具体工厂1class ConcreteFactory1:public AbstractFactory{public:ConcreteFactory1(void){ cout<<"创建工厂1"<<endl; } virtual ~ConcreteFactory1(void){ cout<<"销毁工厂1"<<endl; } virtual AbstractProductA* CreateProductA(){// 创建产品A1return new ConcreteProductA1();}virtual AbstractProductB* CreateProductB(){// 创建产品B1return new ConcreteProductB1();}};// 具体工厂2class ConcreteFactory2:public AbstractFactory{public:ConcreteFactory2(void){ cout<<"创建工厂2"<<endl; } virtual ~ConcreteFactory2(void){ cout<<"销毁工厂2"<<endl; } virtual AbstractProductA* CreateProductA(){// 创建产品A2return new ConcreteProductA2();}virtual AbstractProductB* CreateProductB(){// 创建产品B2return new ConcreteProductB2();}};客户端调用代码如下:
#include "AbstractFactory.h"#include <iostream>using namespace std;int main(int argc,char* argv[]){cout<<"*************************************"<<endl;cout<<"firehood 学设计模式之---抽象工厂模式"<<endl;cout<<"*************************************"<<endl; AbstractFactory *factory = new ConcreteFactory1();//AbstractFactory *factory = new ConcreteFactory2(); AbstractProductA *productA = factory->CreateProductA();AbstractProductB *productB = factory->CreateProductB();delete productA;delete productB;delete factory; system("pause");return 0;}运行结果如下:
*************************************
firehood 学设计模式之---抽象工厂模式
*************************************
创建工厂1
生产产品A1
生产产品B1
销毁产品A1
销毁产品B1
销毁工厂1
请按任意键继续. . .
- 设计模式笔记之---抽象工厂模式
- 《设计模式》笔记之抽象工厂模式
- java设计模式笔记之抽象工厂
- 设计模式笔记之工厂模式--抽象工厂(Abstract Factory)
- 设计模式学习笔记之抽象工厂设计模式
- 笔记十三:设计模式之简单工厂模式、工厂方法模式、抽象工厂模式
- 设计模式之--抽象工厂模式(学习分析笔记)
- 设计模式之03抽象工厂模式(笔记)
- 菜鸟学设计模式系列笔记之抽象工厂模式
- Java学习笔记---设计模式之抽象工厂模式
- Java设计模式笔记之抽象工厂模式
- 设计模式之禅笔记-抽象工厂模式
- 设计模式之抽象工厂
- 设计模式 之 抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- Linux stty
- C# 操作word
- mysql数据库修改数据库编码,字段编码与表编码(转)
- TCP三次握手/四次挥手
- Linux下中文乱码的解决方法
- 设计模式笔记之---抽象工厂模式
- JAVA学习(九)JAVA图形处理
- 大小端系统判断
- javac编译时出现“错误:仅当显式请求注释处理时才接受类名称”的解决办法
- MyEclipse中如何设置 jdk 和 jre 编译运行环境
- 利用Java Annotation 和 Spring AOP实现在Controller层面的操作日志记录
- [转]《走近混沌》-2-简单分形
- 在iOS上实现二维码功能、二维码、条形码、swift 二维码
- aefrasfas