设计模式之抽象工厂
来源:互联网 发布:linux安装jdkrpm 编辑:程序博客网 时间:2024/05/01 18:04
软件架构师需要评审概要设计并检查概要设计是否落实,所以设计模式是重点内容之一。
现实中,每个公司的产品,都封装成dll或exe中,其他公司是无法查看和修改的。
公司一定义了类库的标准,公司二和公司三,分别实现了此类库。公司四建立一个产品,公司五在公司四的产品上二次开发。
公司四2014年使用公司二的类库,公司四2015年使用公司三的类库,这对公司五没有任何影响。
使用VC6建立一个基于对话框的程序test1,增加两个按钮,并关联响应函数,主要代码如下:
//第一个公司的产品,定义了接口//IUnitclass IUnit {public:virtual void Draw(CDC& dc)=0;};//IText 文本接口类class IText : public IUnit{public:virtual void SetText(const char* pText)=0;};//文本类的简单实现class CText : public IText{public :virtual void SetText(const char* pText);protected:CString m_strText;};void CText::SetText(const char* pText){m_strText = pText ;}//工厂接口类class IFactory{public:virtual IText* CreateText()=0;//创建文件类//创建图片等类省略};//第二个公司的实现class CText1 : public CText{public:virtual void Draw(CDC& dc);};void CText1::Draw(CDC& dc){dc.FillRect(CRect(30,30,100,100),&CBrush(RGB(0,255,255)));dc.SetTextColor(RGB(255,0,0));dc.TextOut(30,30,m_strText);}class CFactory1 : public IFactory{public :virtual IText* CreateText();};IText* CFactory1::CreateText(){return new CText1();}//第三个公司的实现class CText2 : public CText{public:virtual void Draw(CDC& dc);};void CText2::Draw(CDC& dc){dc.FillRect(CRect(30,30,100,100),&CBrush(RGB(255,0,255)));dc.SetTextColor(RGB(0,255,0));dc.TextOut(30,30,m_strText);}class CFactory2 : public IFactory{public :virtual IText* CreateText();};IText* CFactory2::CreateText(){return new CText2();}//第四个公司(主程序的实现方)extern IUnit* Init(IFactory& factory);void CTest1Dlg::OnButton1() {//第四个公司的2015年的现实IUnit* p = Init(CFactory1());CWindowDC dc(this);p->Draw(dc);}void CTest1Dlg::OnButton2() {//第四个公司的2016年的现实IUnit* p = Init(CFactory2());CWindowDC dc(this);p->Draw(dc);}//第五个公司的实现IUnit* Init(IFactory& factory){IText* p = factory.CreateText();p->SetText("尚贤");return p;}//第六个公司返回的可能是logo图片(本实例中没实现)而不是文本
公司一类图:
公司二(三)类图
公司四类图
公司五类图
从以上类图可以看出:
公司二(公司三)只需要关心公司一
公司四只需要关心公司一和公司二(三)
公司五只需要要关系公司一
0 0
- 设计模式之抽象工厂
- 设计模式 之 抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之-抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式 之 抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- Html的空格显示
- 学习python的第三十九天-第二章 python必须知道的基础语法
- SpringMVC注解讲解(一)
- angularJS1 数据绑定demo
- H5+CSS3.0常见bug及解决方案
- 设计模式之抽象工厂
- Ubuntu配置
- K-PRSCAN算法实现
- weex嵌入到android工程(window系统)
- Java中的常用异常处理方法
- [BZOJ1483] [HNOI2009]梦幻布丁 链表启发式合并
- Malformed packet(b) (missing colon) gdb gdbserver版本不对
- dingyeye loves stone(阶梯博弈+vector)
- SQL_TRACE与tkprof分析