17种设计模式代码Word下载.docx
《17种设计模式代码Word下载.docx》由会员分享,可在线阅读,更多相关《17种设计模式代码Word下载.docx(48页珍藏版)》请在冰豆网上搜索。
Sequence*s1=newStack();
Sequence*s2=newQueue();
s1->
push
(1);
pop();
s2->
deletes1;
deletes2;
return0;
}
2、建造者模式building
classBuilder
virtualvoidBuildHead(){}
virtualvoidBuildBody(){}
virtualvoidBuildLeftArm(){}
virtualvoidBuildRightArm(){}
virtualvoidBuildLeftLeg(){}
virtualvoidBuildRightLeg(){}
//构造瘦人
classThinBuilder:
publicBuilder
voidBuildHead(){cout<
buildthinbody"
voidBuildBody(){cout<
buildthinhead"
voidBuildLeftArm(){cout<
buildthinleftarm"
voidBuildRightArm(){cout<
buildthinrightarm"
voidBuildLeftLeg(){cout<
buildthinleftleg"
voidBuildRightLeg(){cout<
buildthinrightleg"
//构造胖人
classFatBuilder:
buildfatbody"
buildfathead"
buildfatleftarm"
buildfatrightarm"
buildfatleftleg"
buildfatrightleg"
//构造的指挥官
classDirector
Builder*m_pBuilder;
Director(Builder*builder){m_pBuilder=builder;
voidCreate(){
m_pBuilder->
BuildHead();
BuildBody();
BuildLeftArm();
BuildRightArm();
BuildLeftLeg();
BuildRightLeg();
FatBuilderthin;
Directordirector(&
thin);
director.Create();
3、策略模式
classCOperation
{public:
intm_nFirst;
intm_nSecond;
virtualdoubleGetResult()
{
doubledResult=0;
returndResult;
}
//策略具体类—加法类
classAddOperation:
publicCOperation
AddOperation(inta,intb)
{
m_nFirst=a;
m_nSecond=b;
virtualdoubleGetResult()
returnm_nFirst+m_nSecond;
classSubstrOperation:
SubstrOperation(inta,intb)
returnm_nFirst-m_nSecond;
classContext
COperation*op;
Context(COperation*temp)
op=temp;
doubleGetResult()
returnop->
GetResult();
//客户端
inta,b;
charc;
cin>
>
a>
b;
cout<
请输入运算符"
;
cin>
c;
switch(c)
case'
+'
:
{
Context*context1=newContext(newAddOperation(a,b));
cout<
context1->
GetResult()<
endl;
break;
}
case'
-'
Context*context2=newContext(newSubstrOperation(a,b));
context2->
4、抽象模式
classButton
virtualvoidpaint()=0;
classWinButton:
publicButton
voidpaint(){
std:
cout<
"
WindowButton\n"
classMacButton:
MacButton\n"
classScrollBar
classWinScrollBar:
publicScrollBar
WindowScrollBar\n"
classMacScrollBar:
publicScrollBar{
MacScrollBar\n"
classGUIFactory
virtualButton*createButton()=0;
virtualScrollBar*createScrollBar()=0;
classWinFactory:
publicGUIFactory
Button*createButton(){
returnnewWinButton;
ScrollBar*createScrollBar(){
returnnewWinScrollBar;
classMacFactory:
returnnewMacButton;
returnnewMacScrollBar;
GUIFactory*guiFactory;
Button*btn;
ScrollBar*sb;
guiFactory=newMacFactory;
btn=guiFactory->
createButton();
btn->
paint();
sb=guiFactory->
createScrollBar();
sb->
guiFactory=newWinFactory;
}
5、代理模式
string>
classBigImage
BigImage(stringname):
m_imageName(name){}
virtual~BigImage(){}
virtualvoidShow(){}
protected:
stringm_imageName;
//真实类
classRealBigImage:
publicBigImage
RealBigImage(stringname):
BigImage(name){}
~RealBigImage(){}
voidShow()
cout<
Showbigimage:
m_imageName<
//代理
classProxy:
RealBigImage*m_bigImage;
Proxy(stringname):
BigImage(name),m_bigImage(0)
{}
~Proxy()
deletem_bigImage;
if(m_bigImage==NULL)
pleasewait..."
m_bigImage=newRealBigImage(m_imageName);
//代理创建真实对象
m_bigImage->
Show();
BigImage*image=newProxy("
SomeBigPic.jpg"
);
//使用代理
image->
//代理的操作
deleteimage;
6、非享元模式
vector>
//棋子颜色
enumPieceColor{BLACK,WHITE};
//棋子位置
structPiecePos
intx;
inty;
PiecePos(inta,intb):
x(a),y(b){}
//棋子定义
classPiece
PieceColorm_color;
//颜色
PiecePosm_pos;
//位置
Piece(PieceColorcolor,PiecePospos):
m_color(color),m_pos(pos){}
~Piece(){}
virtualvoidDraw(){}
classBlackPiece:
publicPiece
BlackPiece(PieceColorcolor,PiecePospos):
Piece(color,pos){}
~BlackPiece(){}
voidDraw(){cout<
绘制一颗黑棋"
classWhitePiece:
WhitePiece(PieceColorcolor,PiecePospos):
~WhitePiece(){}
绘制一颗白棋"
classPieceBoard
vector<
Piece*>
m_vecPiece;
//棋盘上已有的棋子
stringm_blackName;
//黑方名称
stringm_whiteName;
//白方名称
PieceBoard(stringblack,stringwhite):
m_blackName(black),m_whiteName(white){}
~PieceBoard(){Clear();
voidSetPiece(PieceColorcolor,PiecePospos)//一步棋,在棋盘上放一颗棋子
Piece*piece=NULL;
if(color==BLACK)//黑方下的
piece=newBlackPiece(color,pos);
//获取一颗黑棋
m_blackName<
在位置("
pos.x<
'
'
pos.y<
)"
piece->
Draw();
//在棋盘上绘制出棋子
else
piece=newWhitePiece(color,pos);
cout<
m_whiteName<
m_vecPiece.push_back(piece);
//加入容器中
voidClear()//释放内存
intsize=m_vecPiece.size();
for(inti=0;
i<
size;
i++)
deletem_vecPiece[i];
PieceBoardpieceBoard("
A"
"
B"
pieceBoard.SetPiece(BLACK,PiecePos(4,4));
pieceBoard.SetPiece(WHITE,PiecePos(4,16));
pieceBoard.SetPiece(BLACK,PiecePos(16,4));
pieceBoard.SetPiece(WHITE,PiecePos(16,16));
7、工厂方法
classButton
{
classOSXButton:
publicButton
voidpaint()
{
cout<
OSXbutton\n"
}
classWindowsButton:
Windowsbutton\n"
classGUIFactory
virtualButton*createButton()=0;
classFactory1:
publicGUIFactory
Button*createButton()
returnnewWindowsButton;
classFactory2:
returnnewOSXButton;
intmain()
GUIFactory*guiFactory1,*guiFactory2;
Button*btn1,*btn2;
guiFactory1=newFactory1;
btn1=guiFactory1->
btn1->
guiFactory2=newFactory2;
btn2=guiFactory2->
btn2->
8、观察者模式
list>
classObserver
Observer(){}
virtual~Observer(){}
virtualvoidUpdate(){}
//博客
classBlog
Blog(){}
virtual~Blog(){}
voidAttach(Observer*observer){m_observers.push_back(observer);
}//添加观察者
voidRemove(Observer*observer){m_observers.remove(observer);
}//移除观察者
voidNotify()//通知观察者
list<
Observer*>
iteratoriter=m_observers.begin();
for(;
iter!
=m_observers.end();
iter++)
(*iter)->
Update();
virtualvoidSetStatus(strings){m_status=s;
}//设置状态
virtualstringGetStatus(){returnm_status;
}//获得状态
Observer*>
m_observers;
//观察者链表
stringm_status;
//状态
//具体博客类
classBlogCSDN:
publicBlog
stringm_name;
//博主名称
BlogCSDN(stringname