17种设计模式代码.docx
- 文档编号:7186436
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:48
- 大小:24.62KB
17种设计模式代码.docx
《17种设计模式代码.docx》由会员分享,可在线阅读,更多相关《17种设计模式代码.docx(48页珍藏版)》请在冰豆网上搜索。
17种设计模式代码
1、适配器模式adapter
#include
usingnamespacestd;
classDeque
{
public:
voidpush_back(intx){cout<<"Dequepush_back"< voidpush_front(intx){cout<<"Dequepush_front"< voidpop_back(){cout<<"Dequepop_back"< voidpop_front(){cout<<"Dequepop_front"< }; //顺序容器 classSequence { public: virtualvoidpush(intx)=0; virtualvoidpop()=0; }; //栈 classStack: publicSequence { public: voidpush(intx){deque.push_back(x);} voidpop(){deque.pop_back();} private: Dequedeque;//双端队列 }; //队列 classQueue: publicSequence { public: voidpush(intx){deque.push_back(x);} voidpop(){deque.pop_front();} private: Dequedeque;//双端队列 }; intmain() { Sequence*s1=newStack(); Sequence*s2=newQueue(); s1->push (1);s1->pop(); s2->push (1);s2->pop(); deletes1;deletes2; return0; } 2、建造者模式building #include usingnamespacestd; classBuilder { public: virtualvoidBuildHead(){} virtualvoidBuildBody(){} virtualvoidBuildLeftArm(){} virtualvoidBuildRightArm(){} virtualvoidBuildLeftLeg(){} virtualvoidBuildRightLeg(){} }; //构造瘦人 classThinBuilder: publicBuilder { public: voidBuildHead(){cout<<"buildthinbody"< voidBuildBody(){cout<<"buildthinhead"< voidBuildLeftArm(){cout<<"buildthinleftarm"< voidBuildRightArm(){cout<<"buildthinrightarm"< voidBuildLeftLeg(){cout<<"buildthinleftleg"< voidBuildRightLeg(){cout<<"buildthinrightleg"< }; //构造胖人 classFatBuilder: publicBuilder { public: voidBuildHead(){cout<<"buildfatbody"< voidBuildBody(){cout<<"buildfathead"< voidBuildLeftArm(){cout<<"buildfatleftarm"< voidBuildRightArm(){cout<<"buildfatrightarm"< voidBuildLeftLeg(){cout<<"buildfatleftleg"< voidBuildRightLeg(){cout<<"buildfatrightleg"< }; //构造的指挥官 classDirector { private: Builder*m_pBuilder; public: Director(Builder*builder){m_pBuilder=builder;} voidCreate(){ m_pBuilder->BuildHead(); m_pBuilder->BuildBody(); m_pBuilder->BuildLeftArm(); m_pBuilder->BuildRightArm(); m_pBuilder->BuildLeftLeg(); m_pBuilder->BuildRightLeg(); } }; intmain() { FatBuilderthin; Directordirector(&thin); director.Create(); return0; } 3、策略模式 #include usingnamespacestd; classCOperation {public: intm_nFirst; intm_nSecond; virtualdoubleGetResult() { doubledResult=0; returndResult; } }; //策略具体类—加法类 classAddOperation: publicCOperation { public: AddOperation(inta,intb) { m_nFirst=a; m_nSecond=b; } virtualdoubleGetResult() { returnm_nFirst+m_nSecond; } }; classSubstrOperation: publicCOperation { public: SubstrOperation(inta,intb) { m_nFirst=a; m_nSecond=b; } virtualdoubleGetResult() { returnm_nFirst-m_nSecond; } }; classContext { private: COperation*op; public: Context(COperation*temp) { op=temp; } doubleGetResult() { returnop->GetResult(); } }; //客户端 intmain() { inta,b; charc; cin>>a>>b; cout<<"请输入运算符"; cin>>c; switch(c) { case'+': { Context*context1=newContext(newAddOperation(a,b)); cout< break; } case'-': { Context*context2=newContext(newSubstrOperation(a,b)); cout< break; } } return0; } 4、抽象模式 #include classButton { public: virtualvoidpaint()=0; }; classWinButton: publicButton { public: voidpaint(){ std: : cout<<"WindowButton\n"; } }; classMacButton: publicButton { public: voidpaint(){ std: : cout<<"MacButton\n"; } }; classScrollBar { public: virtualvoidpaint()=0; }; classWinScrollBar: publicScrollBar { public: voidpaint(){ std: : cout<<"WindowScrollBar\n"; } }; classMacScrollBar: publicScrollBar{ public: voidpaint(){ std: : cout<<"MacScrollBar\n"; } }; classGUIFactory { public: virtualButton*createButton()=0; virtualScrollBar*createScrollBar()=0; }; classWinFactory: publicGUIFactory { public: Button*createButton(){ returnnewWinButton; } ScrollBar*createScrollBar(){ returnnewWinScrollBar; } }; classMacFactory: publicGUIFactory { public: Button*createButton(){ returnnewMacButton; } ScrollBar*createScrollBar(){ returnnewMacScrollBar; } }; intmain() { GUIFactory*guiFactory; Button*btn; ScrollBar*sb; guiFactory=newMacFactory; btn=guiFactory->createButton(); btn->paint(); sb=guiFactory->createScrollBar(); sb->paint(); guiFactory=newWinFactory; btn=guiFactory->createButton(); btn->paint(); sb=guiFactory->createScrollBar(); sb->paint(); return0; } 5、代理模式 #include #include usingnamespacestd; classBigImage { public: BigImage(stringname): m_imageName(name){} virtual~BigImage(){} virtualvoidShow(){} protected: stringm_imageName; }; //真实类 classRealBigImage: publicBigImage { public: RealBigImage(stringname): BigImage(name){} ~RealBigImage(){} voidShow() { cout<<"Showbigimage: "< } }; //代理 classProxy: publicBigImage { private: RealBigImage*m_bigImage; public: Proxy(stringname): BigImage(name),m_bigImage(0) {} ~Proxy() { deletem_bigImage; } voidShow() { if(m_bigImage==NULL) { cout<<"pleasewait..."< m_bigImage=newRealBigImage(m_imageName);//代理创建真实对象 } m_bigImage->Show(); } }; intmain() { BigImage*image=newProxy("SomeBigPic.jpg");//使用代理 image->Show();//代理的操作 deleteimage; return0; } 6、非享元模式 #include #include #include usingnamespacestd; //棋子颜色 enumPieceColor{BLACK,WHITE}; //棋子位置 structPiecePos { intx; inty; PiecePos(inta,intb): x(a),y(b){} }; //棋子定义 classPiece { protected: PieceColorm_color;//颜色 PiecePosm_pos;//位置 public: Piece(PieceColorcolor,PiecePospos): m_color(color),m_pos(pos){} ~Piece(){} virtualvoidDraw(){} }; classBlackPiece: publicPiece { public: BlackPiece(PieceColorcolor,PiecePospos): Piece(color,pos){} ~BlackPiece(){} voidDraw(){cout<<"绘制一颗黑棋"< }; classWhitePiece: publicPiece { public: WhitePiece(PieceColorcolor,PiecePospos): Piece(color,pos){} ~WhitePiece(){} voidDraw(){cout<<"绘制一颗白棋"< }; classPieceBoard { private: vector stringm_blackName;//黑方名称 stringm_whiteName;//白方名称 public: PieceBoard(stringblack,stringwhite): m_blackName(black),m_whiteName(white){} ~PieceBoard(){Clear();} voidSetPiece(PieceColorcolor,PiecePospos)//一步棋,在棋盘上放一颗棋子 { Piece*piece=NULL; if(color==BLACK)//黑方下的 { piece=newBlackPiece(color,pos);//获取一颗黑棋 cout< piece->Draw();//在棋盘上绘制出棋子 } else { piece=newWhitePiece(color,pos); cout< piece->Draw(); } m_vecPiece.push_back(piece);//加入容器中 } voidClear()//释放内存 { intsize=m_vecPiece.size(); for(inti=0;i deletem_vecPiece[i]; } }; intmain() { 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)); return0; } 7、工厂方法 #include usingnamespacestd; classButton { public: virtualvoidpaint()=0; }; classOSXButton: publicButton { public: voidpaint() { cout<<"OSXbutton\n"; } }; classWindowsButton: publicButton { public: voidpaint() { cout<<"Windowsbutton\n"; } }; classGUIFactory { public: virtualButton*createButton()=0; }; classFactory1: publicGUIFactory { public: Button*createButton() { returnnewWindowsButton; } }; classFactory2: publicGUIFactory { public: Button*createButton() { returnnewOSXButton; } }; intmain() { GUIFactory*guiFactory1,*guiFactory2; Button*btn1,*btn2; guiFactory1=newFactory1; btn1=guiFactory1->createButton(); btn1->paint(); guiFactory2=newFactory2; btn2=guiFactory2->createButton(); btn2->paint(); return0; } 8、观察者模式 #include #include #include usingnamespacestd; classObserver { public: Observer(){} virtual~Observer(){} virtualvoidUpdate(){} }; //博客 classBlog { public: Blog(){} virtual~Blog(){} voidAttach(Observer*observer){m_observers.push_back(observer);}//添加观察者 voidRemove(Observer*observer){m_observers.remove(observer);}//移除观察者 voidNotify()//通知观察者 { list : iteratoriter=m_observers.begin(); for(;iter! =m_observers.end();iter++) (*iter)->Update(); } virtualvoidSetStatus(strings){m_status=s;}//设置状态 virtualstringGetStatus(){returnm_status;}//获得状态 private: list protected: stringm_status;//状态 }; //具体博客类 classBlogCSDN: publicBlog { private: stringm_name;//博主名称 public: BlogCSDN(stringname
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 17 设计 模式 代码