11Bridge桥梁模式.docx
《11Bridge桥梁模式.docx》由会员分享,可在线阅读,更多相关《11Bridge桥梁模式.docx(7页珍藏版)》请在冰豆网上搜索。
![11Bridge桥梁模式.docx](https://file1.bdocx.com/fileroot1/2022-10/29/a03b00dc-a295-4dea-a7d1-517a666694f1/a03b00dc-a295-4dea-a7d1-517a666694f11.gif)
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