11Bridge桥梁模式.docx
- 文档编号:2412448
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:7
- 大小:41.44KB
11Bridge桥梁模式.docx
《11Bridge桥梁模式.docx》由会员分享,可在线阅读,更多相关《11Bridge桥梁模式.docx(7页珍藏版)》请在冰豆网上搜索。
11Bridge桥梁模式
桥梁模式,将抽象部分与它的实现部分分离,使它们都可以独立地变化。
实现分离的办法就是增加一个类,
11.1.解释
main(),客户
IProduct,产品接口
CHouse,房子
CIPod,ipod
CClothes,服装
CNewCorp,桥梁类,MakeMoney()是桥梁方法
CNewHouseCorp,只能生产房子,所以构造函数是CHouse*
CShanZhaiCorp,什么赚钱就生产什么,所以构造函数是IProduct*
说明:
客户直接使用CNewHouseCorp和CShanZhaiCorp类,在main()函数里构造产品,然后传到这两个类里。
这两个类的MakeMoney()函数,先调用基类的MakeMoney(),然后分别执行各自的逻辑。
注意:
CNewCorp起到了桥梁的作用。
可以分别增加产品和公司。
看代码:
//NewCorp.h
#pragmaonce
#include"IProduct.h"
classCNewCorp
{
public:
CNewCorp(IProduct*pproduct);
virtual~CNewCorp(void);
voidMakeMoney();
private:
IProduct*m_pProduct;
};
//NewCorp.cpp
#include"StdAfx.h"
#include"NewCorp.h"
CNewCorp:
:
CNewCorp(IProduct*pproduct)
{
this->m_pProduct=pproduct;
}
CNewCorp:
:
~CNewCorp(void)
{
}
voidCNewCorp:
:
MakeMoney()
{
//每个公司都是一样,先生产
this->m_pProduct->BeProducted();
//然后销售
this->m_pProduct->BeSelled();
}
//NewHouseCorp.h
#pragmaonce
#include"newcorp.h"
#include"House.h"
classCNewHouseCorp:
publicCNewCorp
{
public:
CNewHouseCorp(CHouse*pHouse);
~CNewHouseCorp(void);
voidMakeMoney();
};
//NewHouseCorp.cpp
#include"StdAfx.h"
#include"NewHouseCorp.h"
#include
usingstd:
:
cout;
usingstd:
:
endl;
CNewHouseCorp:
:
CNewHouseCorp(CHouse*pHouse):
CNewCorp(pHouse)
{
}
CNewHouseCorp:
:
~CNewHouseCorp(void)
{
}
voidCNewHouseCorp:
:
MakeMoney()
{
this->CNewCorp:
:
MakeMoney();
cout<<"房地产公司赚大钱了..."< } //ShanZhaiCorp.h #pragmaonce #include"newcorp.h" #include"IProduct.h" classCShanZhaiCorp: publicCNewCorp { public: CShanZhaiCorp(IProduct*pproduct); ~CShanZhaiCorp(void); voidMakeMoney(); }; //ShanZhaiCorp.cpp #include"StdAfx.h" #include"ShanZhaiCorp.h" #include usingstd: : cout; usingstd: : endl; CShanZhaiCorp: : CShanZhaiCorp(IProduct*pproduct): CNewCorp(pproduct) { } CShanZhaiCorp: : ~CShanZhaiCorp(void) { } voidCShanZhaiCorp: : MakeMoney() { this->CNewCorp: : MakeMoney(); cout<<"我赚钱呀..."< } //IProduct.h #pragmaonce classIProduct { public: IProduct(void) { } virtual~IProduct(void) { } virtualvoidBeProducted()=0; virtualvoidBeSelled()=0; }; //House.h #pragmaonce #include"iproduct.h" classCHouse: publicIProduct { public: CHouse(void); ~CHouse(void); voidBeProducted(); voidBeSelled(); }; //House.cpp #include"StdAfx.h" #include"House.h" #include usingstd: : cout; usingstd: : endl; CHouse: : CHouse(void) { } CHouse: : ~CHouse(void) { } voidCHouse: : BeProducted() { cout<<"生产出的房子是这个样子的..."< } voidCHouse: : BeSelled() { cout<<"生产出的房子卖出去了..."< } //Clothes.h #pragmaonce #include"iproduct.h" classCClothes: publicIProduct { public: CClothes(void); ~CClothes(void); voidBeProducted(); voidBeSelled(); }; //Clothes.cpp #include"StdAfx.h" #include"Clothes.h" #include usingstd: : cout; usingstd: : endl; CClothes: : CClothes(void) { } CClothes: : ~CClothes(void) { } voidCClothes: : BeProducted() { cout<<"生产出的衣服是这个样子的..."< } voidCClothes: : BeSelled() { cout<<"生产出的衣服卖出去了..."< } //IPod.h #pragmaonce #include"iproduct.h" classCIPod: publicIProduct { public: CIPod(void); ~CIPod(void); voidBeProducted(); voidBeSelled(); }; //IPod.cpp #include"StdAfx.h" #include"IPod.h" #include usingstd: : cout; usingstd: : endl; CIPod: : CIPod(void) { } CIPod: : ~CIPod(void) { } voidCIPod: : BeProducted() { cout<<"生产出的ipod是这个样子的..."< } voidCIPod: : BeSelled() { cout<<"生产出的ipod卖出去了..."< } // //Bridge.cpp: 定义控制台应用程序的入口点。 // #include"stdafx.h" #include"ClothesCorp.h" #include"NewHouseCorp.h" #include"Clothes.h" #include"IPod.h" #include"ShanZhaiCorp.h" #include usingstd: : cout; usingstd: : endl; voidDoNewRun1() { cout<<"----------房地产公司是这样运行的----------"< CHousehouse; CNewHouseCorpnewHouseCorp(&house); newHouseCorp.MakeMoney(); cout< cout<<"----------山寨公司是这样运行的----------"< CClothesclothes; CShanZhaiCorpshanZhaiCorp(&clothes); shanZhaiCorp.MakeMoney(); cout< } voidDoNewRun2() { cout<<"----------房地产公司是这样运行的----------"< CHousehouse; CNewHouseCorpnewHouseCorp(&house); newHouseCorp.MakeMoney(); cout< cout<<"----------山寨公司是这样运行的----------"< CIPodipod; CShanZhaiCorpshanZhaiCorp(&ipod); shanZhaiCorp.MakeMoney(); cout< } int_tmain(intargc,_TCHAR*argv[]) { //只有两家公司,一家是房地产公司,另一家公司是衣服赚钱就生产衣服 DoNewRun1(); //只有两家公司,一家是房地产公司,另一家公司是ipod赚钱就生产ipod DoNewRun2(); _CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF|_CRTDBG_ALLOC_MEM_DF); _CrtDumpMemoryLeaks
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 11 Bridge 桥梁 模式
![提示](https://static.bdocx.com/images/bang_tan.gif)