设计模式之三--抽象工厂模式
来源:互联网 发布:亲密敌人知乎 编辑:程序博客网 时间:2024/05/17 08:04
1 英文名和别名:
abstract factory,kit
2 意图:
当有多种产品位于不同的产品族,需要创建相互依赖的的对象,无需知道其具体的类。
谈谈我对产品等级和产品族的理解,产品等级指的是具有继承关系的父子或兄弟,而产品等级指的是不同产品等级直接需要相互组合的这样一个关系
3 示例
考虑这样一个问题,在一个需要考虑跨平台的软件上,需要根据不同的平台创建不同的text和button,在windows下需要创建windows的text和button,在linux下需要创建linux下的text和button,text和windowtext就是产品等级,windowtext和windowsbutton就是产品族
uml类图如下:
实现如下:
抽象产品CText
#ifndef __TEXT_H#define __TEXT_Hclass CText{public:virtual void Show()=0;virtual ~CText(){}protected:CText(){}};#endif
具体产品CWindowText
#ifndef WINDOWTEXT_H#define WINDOWTEXT_H#include "Text.h"class CWindowText: publicCText{public:virtual ~CWindowText();CWindowText();virtual void Show();};#endif#include "WindowText.h"#include <iostream>using namespace std;CWindowText::CWindowText(){}CWindowText::~CWindowText(){}void CWindowText::Show(){ cout<<"CWindowText::Show()\n";}
具体产品CLiunxText
#ifndef __LINUXTEXT_H#define __LINUXTEXT_H#include "Text.h"class CLinuxText:public CText{public:CLinuxText();virtual ~CLinuxText();virtual void Show();};#endif#include "LinuxText.h"#include <iostream>using namespace std;CLinuxText::CLinuxText(){}CLinuxText::~CLinuxText(){}void CLinuxText::Show(){cout<<"CLinuxText::Show().\n";}
抽象产品CButton
#ifndef __BUTTON_H#define __BUTTON_Hclass CButton{public:virtual ~CButton(){}virtual void Show()=0;protected:CButton(){}};#endif
具体产品CWindowButton
#ifndef __WINDOWBUTTON_H#define __WINDOWBUTTON_H#include "Button.h"class CWindowButton:public CButton{public:CWindowButton();virtual ~CWindowButton();virtual void Show();};#endif#include "WindowButton.h"#include <iostream>using namespace std;CWindowButton::CWindowButton(){}CWindowButton::~CWindowButton(){}void CWindowButton::Show(){cout<<"CWindowButton::Show()\n";}
具体产品CLinuxButton
#ifndef __LINUXBUTTON_H#define __LINUXBUTTON_H#include "Button.h"class CLinuxButton: public CButton{public:CLinuxButton();virtual ~CLinuxButton();virtual void Show();};#endif#include "LinuxButton.h"#include <iostream>using namespace std;CLinuxButton::CLinuxButton(){}CLinuxButton::~CLinuxButton(){}void CLinuxButton::Show(){cout<<"CLinuxButton::Show().\n";}
抽象工厂CFacory
#ifndef __FACTORY_H#define __FACTORY_H#include "Text.h"#include "Button.h"class CFactory{public:virtual CText* CreateText()=0;virtual CButton* CreateButton()=0;virtual ~CFactory(){}protected:CFactory(){}};#endif
具体工厂CWindowFactory
#ifndef __WINDOWFACTORY_H#define __WINDOWFACTORY_H#include "Factory.h"class CWindowFactroy:public CFactory{public:virtual CText* CreateText();virtual CButton* CreateButton();virtual ~CWindowFactroy();CWindowFactroy();};#endif #include "WindowFactory.h"#include "WindowButton.h"#include "WindowText.h"CText* CWindowFactroy::CreateText(){return ( new CWindowText() );}CButton* CWindowFactroy::CreateButton(){return ( new CWindowButton() );}CWindowFactroy::CWindowFactroy(){}CWindowFactroy::~CWindowFactroy(){}
具体产品CLiunxFactory
#ifndef __LINUXFACTORY_H#define __LINUXFACTORY_H#include "Factory.h"class CLinuxFactory:public CFactory{public:CLinuxFactory();virtual ~CLinuxFactory();virtual CText* CreateText();virtual CButton* CreateButton();};#endif #include "LinuxFactory.h"#include "LinuxButton.h"#include "LinuxText.h"CLinuxFactory::CLinuxFactory(){}CLinuxFactory::~CLinuxFactory(){}CText* CLinuxFactory::CreateText(){return ( new CLinuxText );}CButton* CLinuxFactory::CreateButton(){return ( new CLinuxButton );}
客户端
#include <iostream>#include "Factory.h"#include "WindowFactory.h"#include "Button.h"#include "Text.h"void main(){CFactory *pFac=NULL;CText* pText=NULL;CButton *pButton=NULL;pFac=new CWindowFactroy;pText=pFac->CreateText();pButton=pFac->CreateButton();pText->Show();pButton->Show();delete pFac;delete pText;delete pButton;}
今天就到这里,明天总结简单工厂,工厂方法和抽象工厂各自的优点缺点^_^
- 三 设计模式之抽象工厂模式
- 设计模式之三--抽象工厂模式
- 设计模式之三:抽象工厂模式
- 设计模式之三抽象工厂模式
- 设计模式之三:抽象工厂模式
- 设计模式之三:抽象工厂模式
- 设计模式之三:抽象工厂模式
- 设计模式之抽象工厂模式(三)
- 设计模式之工厂模式(三)之抽象工厂模式
- 设计模式培训之三:抽象工厂
- 设计模式培训之三:抽象工厂
- Java设计模式之三(抽象工厂模式)
- 设计模式之三 抽象工厂模式 Abstract Factory
- 设计模式系列之三:抽象工厂模式
- 设计模式(三)---抽象工厂模式
- 设计模式(三)--抽象工厂模式
- 设计模式(三)---抽象工厂模式
- 设计模式(三)抽象工厂模式
- 《Unix环境高级编程》:死锁检测实例
- DBGridEh 隔行变色
- ubuntu下用Gummi写中文Latex
- sourceforge + wordpress 建立一个空博客
- 第六章---字符串
- 设计模式之三--抽象工厂模式
- sIEve简介
- 字符串转整型数字
- H.264 相关
- 2012九月笔试总结
- C 语言的各种变量的存储,指针的常见错误的总结
- 窗口类的类型(Types of Window Classes)
- HDU 3015 Disharmony Trees 树状数组
- 转:李开复:给创业者五个建议