青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-91  評論-137  文章-0  trackbacks-0

裝飾模式

前序

制作一個可以給人搭配不同的服飾的系統,比如類似QQ,網絡游戲或論壇都有的Avatar系統.

裝飾模式

裝飾模式以對客戶端透明的方式擴展對象的功能,是繼承關系的一個替代方案,提供比繼承更多的靈活性。動態給一個對象增加功能,這些功能可以再動態的撤消。增加由一些基本功能的排列組合而產生的非常大量的功能。

實現方式(UML類圖)

實現代碼

#include <stdio.h>

 

class Person

{

public:

       Person() : name(0){}

       Person(char* _name) : name(_name){}

      

       virtual void Show()

       {

              printf("裝扮的%s",name);

       }

protected:

       char* name;

};

 

class Finery : public Person

{

public:

       Finery() : component(0){}

      

       void Decorate(Person* component)

       {

              this->component = component;

       }

      

       virtual void Show()

       {

              if(component) component->Show();

       }

protected:

       Person* component;

};

 

class TShirts : public Finery

{

public:

       virtual void Show()

       {

              printf("T ");

              __super::Show();

       }

};

 

class BigTrouser : public Finery

{

public:

       virtual void Show()

       {

              printf("跨褲 ");

              __super::Show();

       }

};

 

class Sneakers : public Finery

{

public:

       virtual void Show()

       {

              printf("破球鞋 ");

              __super::Show();

       }

};

 

class Suit : public Finery

{

public:

       virtual void Show()

       {

              printf("西裝 ");

              __super::Show();

       }

};

 

class Tie : public Finery

{

public:

       virtual void Show()

       {

              printf("領帶 ");

              __super::Show();

       }

};

 

class LeatherShoes : public Finery

{

public:

       virtual void Show()

       {

              printf("皮鞋 ");

              __super::Show();

       }

};

 

int main()

{

       Person* xc = new Person("小菜");

      

       printf("第一種裝扮:\n");

      

       Sneakers* pqx = new Sneakers();

       BigTrouser* kk = new BigTrouser();

       TShirts* dtx = new TShirts();

      

       pqx->Decorate(xc);

       kk->Decorate(pqx);

       dtx->Decorate(kk);

       dtx->Show();

      

       printf("\n第二種裝扮:\n");

      

       LeatherShoes* px = new LeatherShoes();

       Tie* ld = new Tie();

       Suit* xz = new Suit();

      

       px->Decorate(xc);

       ld->Decorate(px);

       xz->Decorate(ld);

       xz->Show();

      

       delete xc;

      

       delete pqx;

       delete kk;

       delete dtx;

      

       delete px;

       delete ld;

       delete xz;

       return 0;

}

運行結果

posted on 2011-05-05 16:04 lwch 閱讀(2680) 評論(5)  編輯 收藏 引用 所屬分類: 設計模式

評論:
# re: 裝飾模式 2011-05-06 12:52 | 千暮(zblc)
VS10的建模工具真有美感 - -bnr   回復  更多評論
  
# re: 裝飾模式 2011-05-06 16:07 | lwch
@千暮(zblc)
截圖下來貌似有點變色..  回復  更多評論
  
# re: 裝飾模式 2012-06-20 22:23 |
這個是裝飾器模式嗎??樓主請好好看看書。不要誤人子弟  回復  更多評論
  
# re: 裝飾模式 2012-06-21 17:35 | lwch
@林
代碼來源于《大話設計模式》  回復  更多評論
  
# re: 裝飾模式 2012-07-11 22:49 | liawof


#include <iostream>
#include <string>
using namespace std;

class Beverage
{
public:
Beverage():description("Unknown Beverage")
{

}
virtual std::string getDescription()//:description = "Unknown Beverage"
{
return description;
}

virtual double cost() = 0;
//{
// return 0;
//};

string description ;

protected:
private:

};


class CondimenteDecorator :public Beverage
{
public:
virtual string getDescription() = 0;
//{
// return description;
//}
protected:
private:
};


class Espresso :public Beverage
{
public:
Espresso()
{
description = "Espresso";
}


double cost()
{
return 1.99;
}
};


class HouseBlend :public Beverage
{
public:
HouseBlend()
{
description = "HouseBlend";
}


double cost()
{
return 0.99;
}
};


class DarkRoast :public Beverage
{
public:
DarkRoast()
{
description = "DarkRoast";
}


double cost()
{
return 0.88;
}
};


class Mocha :public CondimenteDecorator
{
public:
Mocha(Beverage *bevergage)
{
this->bevergage = bevergage;
}

string getDescription()
{
return bevergage->getDescription() + string(" Mocha");
}

double cost()
{
return 0.20 + bevergage->cost();
}
protected:
private:

Beverage *bevergage;
};


class Whip :public CondimenteDecorator
{
public:
Whip(Beverage *bevergage)
{
this->bevergage = bevergage;
}

string getDescription()
{
return bevergage->getDescription() + " Whip";
}

double cost()
{
return 0.40 + bevergage->cost();
}
protected:
private:

Beverage *bevergage;
};


class Soy :public CondimenteDecorator
{
public:
Soy(Beverage *bevergage)
{
this->bevergage = bevergage;
}

string getDescription()
{
return bevergage->getDescription() + " Soy";
}

double cost()
{
return 0.40 + bevergage->cost();
}
protected:
private:

Beverage *bevergage;
};




#include "Beverage.h"


int main()
{
Beverage *pBeverage = new Espresso;

std::cout<<pBeverage->getDescription().c_str()<<" $"<<pBeverage->cost()<<std::endl;


Beverage *pBeverage2 = new DarkRoast;
pBeverage2 = new Mocha(pBeverage2);
pBeverage2 = new Mocha(pBeverage2);
pBeverage2 = new Whip(pBeverage2);
std::cout<<pBeverage2->getDescription().c_str()<<" $"<<pBeverage2->cost()/**/<<std::endl;

Beverage *pBeverage3 = new HouseBlend;
pBeverage3 = new Soy(pBeverage3);
pBeverage3 = new Mocha(pBeverage3);
pBeverage3 = new Whip(pBeverage3);

std::cout<<pBeverage3->getDescription().c_str()<<" $"<<pBeverage3->cost()<<std::endl;

return 0;

}


這才是真正的裝飾模式!  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久午夜电影网| 91久久久久久国产精品| 亚洲春色另类小说| 激情成人综合| 亚洲欧洲精品一区二区三区不卡| 国产亚洲欧美日韩一区二区| 国产女精品视频网站免费 | 一本一本久久a久久精品牛牛影视| 亚洲国产欧美一区二区三区久久 | 亚洲精品一区二区三区不| 最新国产拍偷乱拍精品 | 另类av一区二区| 欧美11—12娇小xxxx| 亚洲国产影院| 亚洲自拍电影| 开元免费观看欧美电视剧网站| 欧美成人免费全部| 欧美色偷偷大香| 极品日韩久久| 一本色道久久综合亚洲二区三区| 亚洲欧美日韩人成在线播放| 久久偷窥视频| 在线一区视频| 欧美xart系列高清| 国产精品专区h在线观看| 亚洲国产国产亚洲一二三| 亚洲一区二区三区中文字幕在线 | 一区二区三区黄色| 亚洲第一在线视频| 国产精品国产馆在线真实露脸 | 欧美精品在线一区| 国产欧美日本一区视频| 亚洲精品美女在线| 久久精品人人爽| 日韩亚洲欧美精品| 欧美大片在线看| 狠狠做深爱婷婷久久综合一区| 正在播放欧美视频| 欧美黑人一区二区三区| 欧美一级免费视频| 国产精品二区三区四区| 亚洲精品一区二区三区99| 久久精品最新地址| 亚洲一区二区三区四区中文| 欧美日本久久| 亚洲三级电影全部在线观看高清| 久久免费精品视频| 欧美一级黄色录像| 国产精品资源| 欧美亚洲一区二区在线| 亚洲日本免费电影| 欧美电影专区| 亚洲日本中文字幕| 欧美国产第一页| 久久久久九九九| 韩国女主播一区| 久久天堂国产精品| 久久精品一区二区三区四区 | 亚洲一区久久| 国产精品成人一区| 亚洲欧美春色| 亚洲午夜小视频| 国产精品久久久久一区二区三区| 亚洲午夜激情| 亚洲一二三级电影| 国产模特精品视频久久久久| 欧美在线日韩精品| 欧美一区激情| 国产一区二三区| 蜜臀va亚洲va欧美va天堂| 开元免费观看欧美电视剧网站| 亚洲高清av| 亚洲三级性片| 国产精品久久久久高潮| 久久国产综合精品| 久久久久久久久蜜桃| 亚洲第一区在线| 亚洲人成在线观看网站高清| 欧美色一级片| 久久久国际精品| 久色成人在线| 午夜精品一区二区在线观看| 午夜视频久久久久久| 极品尤物一区二区三区| 亚洲啪啪91| 亚洲精品一区二区在线观看| 亚洲国产欧美不卡在线观看| 欧美激情第3页| 亚洲一区高清| 久久国产精品第一页| 最新精品在线| 亚洲午夜精品久久久久久app| 国内精品视频久久| 亚洲欧洲日产国码二区| 国产精品久久婷婷六月丁香| 久久婷婷综合激情| 欧美视频成人| 免费短视频成人日韩| 欧美日本一区二区三区| 久久精品一区蜜桃臀影院| 欧美高清免费| 久久久噜噜噜久久中文字免| 欧美另类69精品久久久久9999| 午夜日韩在线观看| 欧美大色视频| 久久亚洲精品中文字幕冲田杏梨| 欧美大片免费观看在线观看网站推荐 | 久久先锋影音| 欧美日韩另类在线| 嫩草国产精品入口| 国产女人精品视频| 亚洲黑丝一区二区| 国产综合色一区二区三区| 日韩视频三区| 亚洲国产91色在线| 欧美一区二区三区四区视频| 一区二区激情小说| 蜜臀91精品一区二区三区| 久久精品成人欧美大片古装| 欧美人与性动交cc0o| 欧美福利小视频| 黄色一区二区在线| 亚洲欧美日韩综合| 亚洲综合欧美| 欧美日韩一区综合| 亚洲国产一区二区三区a毛片| 国产亚洲福利一区| 亚洲中字在线| 先锋资源久久| 国产精品高潮呻吟久久av黑人| 亚洲国产专区校园欧美| 亚洲国产精品悠悠久久琪琪| 久久久国产91| 毛片av中文字幕一区二区| 国产专区欧美精品| 欧美主播一区二区三区| 久久99伊人| 国产精品美女久久久久久2018| 日韩视频在线免费观看| 99在线精品视频| 欧美日韩精品免费观看视频| 亚洲精选一区| 亚洲欧美国产高清| 国产免费亚洲高清| 香蕉久久国产| 裸体丰满少妇做受久久99精品| 在线观看亚洲视频| 美女图片一区二区| 欧美特黄一级大片| 久久精品国产一区二区三区免费看 | 亚洲国产一区二区a毛片| 午夜国产精品视频| 亚洲国产精品综合| 国产亚洲va综合人人澡精品| 欧美福利一区| 久久视频一区| 午夜精品影院在线观看| 99精品国产在热久久下载| 欧美福利电影网| 免费看黄裸体一级大秀欧美| 久久精品系列| 欧美一区二区三区成人| 在线一区视频| 亚洲美女淫视频| 亚洲清纯自拍| 亚洲黄色成人久久久| 黄色亚洲大片免费在线观看| 国产嫩草影院久久久久| 国产精品久久国产精品99gif | 亚洲精品一区二区网址 | 免费影视亚洲| 蜜桃av噜噜一区| 久久一区激情| 久久久一区二区| 久久久av水蜜桃| 久久精品日韩欧美| 久久另类ts人妖一区二区| 久久av二区| 欧美在线免费视屏| 欧美一区午夜视频在线观看| 性欧美大战久久久久久久免费观看 | 香蕉国产精品偷在线观看不卡| 在线亚洲免费| 亚洲香蕉伊综合在人在线视看| 中文国产成人精品| 亚洲视频在线观看三级| 亚洲一区二区视频在线观看| 亚洲午夜在线观看| 亚洲免费一区二区| 欧美在线看片| 久久亚洲春色中文字幕| 欧美h视频在线| 亚洲激情偷拍| 一本色道精品久久一区二区三区| 99爱精品视频| 午夜在线电影亚洲一区| 久久综合图片| 欧美日韩情趣电影| 国产精品自在在线| 亚洲二区在线|