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

隨筆-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 閱讀(2671) 評論(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>
            亚洲国内自拍| 久久国产手机看片| 欧美日韩一区三区| 亚洲永久免费视频| 亚洲欧美另类中文字幕| 国产精品视频观看| 久久久久一区二区| 麻豆精品精品国产自在97香蕉| 国产一区二区三区在线观看视频 | 亚洲欧美日本日韩| 欧美一区二区视频免费观看| 亚洲高清影视| 一区二区三区视频在线观看| 国产专区精品视频| 亚洲国产精品久久久久秋霞蜜臀| 欧美sm重口味系列视频在线观看| 一本一道久久综合狠狠老精东影业 | 一区二区三区成人精品| 国产亚洲精品v| 91久久精品美女高潮| 国产精品国产三级国产普通话三级 | 黄色精品网站| 亚洲免费观看在线视频| 国产伦理一区| 男女精品网站| 巨乳诱惑日韩免费av| 亚洲一区二区动漫| 亚洲电影视频在线| 亚洲伊人伊色伊影伊综合网| 激情综合亚洲| 一区二区免费在线视频| 国产一区二区三区四区三区四| 亚洲欧洲日本一区二区三区| 国产亚洲精品自拍| 亚洲美女91| 亚洲福利免费| 欧美一区精品| 亚洲午夜精品久久久久久app| 久久精品亚洲一区二区三区浴池| 亚洲视频中文| 欧美久久成人| 欧美高清视频在线观看| 国产精品综合不卡av| 亚洲人体1000| 91久久精品国产91性色tv| 欧美亚洲综合另类| 亚洲欧美日本在线| 欧美日本在线| 亚洲日本欧美在线| 亚洲国产欧美不卡在线观看 | 久久久久久综合网天天| 欧美日韩国产综合久久| 欧美国产先锋| 在线日韩av| 久久九九99视频| 久久免费视频在线| 国产亚洲欧美激情| 欧美在线视频观看免费网站| 羞羞色国产精品| 国产伦精品一区二区三区视频孕妇 | 性色av一区二区三区在线观看| 欧美日韩另类综合| 一本久久精品一区二区| aa级大片欧美三级| 欧美精品一区二区高清在线观看| 欧美成人精品在线播放| 亚洲国产精品成人va在线观看| 久久亚洲综合网| 欧美国产大片| 一区二区精品国产| 欧美日韩国产影院| 亚洲一区精品电影| 久久精品女人的天堂av| 国产亚洲午夜| 久久在线91| 欧美国产亚洲另类动漫| 一区二区三区国产精品| 欧美三级乱码| 午夜亚洲福利在线老司机| 久久人人爽爽爽人久久久| 亚洲国产精品va在线看黑人动漫 | 欧美一区二区三区四区高清 | 一区二区三区高清在线| 午夜精品视频在线观看| 国产日产亚洲精品系列| 久久亚洲国产精品日日av夜夜| 国内外成人在线| 亚洲国产精品成人综合色在线婷婷| 亚洲精品免费在线播放| 欧美性片在线观看| 欧美在线短视频| 欧美黑人国产人伦爽爽爽| 亚洲午夜国产成人av电影男同| 国产精品视频最多的网站| 久久免费精品视频| 91久久精品一区二区三区| 亚洲专区免费| 亚洲国产99| 国产精品男女猛烈高潮激情| 久久久久久久久久久久久久一区 | 亚洲欧美日韩一区二区在线| 国内精品一区二区| 欧美剧在线观看| 欧美一区二区三区免费观看视频| 亚洲风情在线资源站| 香蕉成人啪国产精品视频综合网| 在线看国产一区| 国产精品久久77777| 乱码第一页成人| 亚洲一区二区三| 亚洲日韩视频| 鲁大师影院一区二区三区| 亚洲一区二区在线视频| 亚洲大片在线| 国产亚洲亚洲| 国产精品你懂的在线| 欧美激情视频在线播放| 久久激五月天综合精品| 亚洲午夜女主播在线直播| 亚洲激情综合| 免费日韩成人| 久久美女艺术照精彩视频福利播放| 亚洲校园激情| 宅男精品视频| 亚洲精品一区二| 在线精品一区二区| 激情文学综合丁香| 国产午夜精品全部视频播放| 欧美午夜在线| 国产精品久久久久77777| 欧美精品在线视频观看| 欧美成人免费在线视频| 老司机免费视频一区二区| 久久久久久久性| 欧美专区在线播放| 欧美一区视频| 欧美与黑人午夜性猛交久久久| 亚洲制服av| 午夜激情亚洲| 欧美综合激情网| 久久久噜噜噜久久狠狠50岁| 性欧美长视频| 久久精品中文字幕免费mv| 久久国产88| 鲁大师影院一区二区三区| 玖玖精品视频| 欧美激情第一页xxx| 欧美精品一区二区在线观看| 欧美精品在线观看| 欧美日韩另类字幕中文| 国产精品美女www爽爽爽| 国产精品美女一区二区| 国产精品欧美在线| 国产一区三区三区| 红桃视频成人| 亚洲精品国产精品国产自| 日韩亚洲视频在线| 亚洲在线国产日韩欧美| 欧美一区二区观看视频| 久久久精品国产一区二区三区| 久久久噜噜噜久久| 亚洲国产精品成人va在线观看| 91久久久久久| 久久国产主播精品| 国产精品一区二区在线观看| 国产模特精品视频久久久久 | 欧美a级在线| 欧美日韩美女| 国产午夜精品久久久久久久| 尤物yw午夜国产精品视频明星| 亚洲精品久久久久久久久久久久| 制服丝袜亚洲播放| 久久久成人精品| 91久久精品国产| 性做久久久久久| 欧美黄色片免费观看| 国产精品视频福利| 亚洲精品久久久久久久久久久久久| 亚洲欧美国产精品va在线观看 | 欧美高清视频| 亚洲欧美区自拍先锋| 蜜臀a∨国产成人精品| 国产精品国产三级欧美二区 | 国产午夜精品久久久久久久| 99re这里只有精品6| 久久精品男女| 中文日韩在线视频| 乱人伦精品视频在线观看| 国产精品一页| 一区二区三区欧美成人| 免费看亚洲片| 篠田优中文在线播放第一区| 欧美久久成人| 亚洲高清在线视频| 久久裸体艺术| 性欧美超级视频| 国产精品丝袜白浆摸在线| 夜色激情一区二区| 欧美成va人片在线观看| 欧美中文字幕第一页|