毛坯還是精裝修难述,先看看樣板房萤晴,『裝飾模式』

目錄:設(shè)計模式之小試牛刀
源碼路徑:Github-Design Pattern


定義:(Decorator Pattern)

動態(tài)地給一個對象添加一些額外的職責(zé)。就增加功能來說胁后,裝飾模式相比生成子類更為靈活店读。

類圖:

裝飾模式通用類圖

啟示:

最近兩年,樓市瘋狂攀芯,房價漲的離譜屯断。這不,為了在深圳有個自己的小家,筆者當(dāng)然也要出去看看房啊殖演,合適就出手買一套啊氧秘。首先在網(wǎng)上就是一通了解啊,深圳的房價基本5萬起步趴久,動輒十萬以上丸相。算了,筆者這點小工資就只能退而求其次彼棍,去惠州看房去灭忠。
第一次看房,難免不懂門道座硕。先跟著銷售轉(zhuǎn)轉(zhuǎn)看吧弛作。
先去看看毛坯房,那完全沒有感覺啊华匾。粗糙地面映琳,水電未通。

毛坯房

算了還是直接去看樣板房吧蜘拉。
樣板房一進(jìn)門就不一樣啊萨西,那裝修,那氣派诸尽,那家具原杂,往沙發(fā)一坐,家的感覺立馬油然而生D!年局!

樣板房

這一坐不打緊际看,靈感乍現(xiàn)啊,毛坯房和樣板房不就是裝飾模式的現(xiàn)實實例嗎矢否?仲闽!

來來來,上代碼僵朗,咱看看裝飾模式的具體實現(xiàn)赖欣。

代碼:

先看看毛坯房的簡單實現(xiàn):

 /// <summary>
    /// 抽象房類
    /// </summary>
    public abstract class AbstractHouse
    {
        /// <summary>
        /// 面積
        /// </summary>
        public double Area { get; set; }

        /// <summary>
        /// 規(guī)格
        /// </summary>
        public string Specification { get; set; }

        /// <summary>
        /// 價格
        /// </summary>
        public decimal Price { get; set; }

        /// <summary>
        /// 定義抽象方法--展示
        /// </summary>
        public abstract void Show();
    }

    /// <summary>
    /// 未裝修房 -- 毛坯房
    /// </summary>
    public class WithoutDecoratorHouse : AbstractHouse
    {
        /// <summary>
        /// 毛坯房就做簡要展示
        /// </summary>
        public override void Show()
        {
            Console.WriteLine(string.Format("該戶型為{0}㎡,戶型設(shè)計為{1}验庙,目前均價為{2}元/㎡顶吮。", this.Area, this.Specification, this.Price));
        }
    }

毛坯房真是內(nèi)行看門道,外行看熱鬧啊粪薛,筆者自然是看不懂啊悴了。
走看看樣板房去。

 /// <summary>
    /// 裝修房
    /// </summary>
    public abstract class DecoratorHouse : AbstractHouse
    {
        private readonly AbstractHouse house;

        public DecoratorHouse(AbstractHouse house)
        {
            this.house = house;
        }
        public override void Show()
        {
            this.house.Show();
        }
    }

    /// <summary>
    /// 裝修房--樣板房
    /// </summary>
    public class ModelHouse : DecoratorHouse
    {
        public ModelHouse(AbstractHouse house) : base(house)
        {
        }

        /// <summary>
        /// 展示樣板房細(xì)節(jié)
        /// </summary>
        private void ShowDetail()
        {
            Console.WriteLine(@"
* 首先,您看到的是我們大概5平方的簡單實用的入戶花園湃交。
* 樣板間的整體按歐式風(fēng)格裝修熟空,精致溫馨。
* 進(jìn)門右看是我們的餐廚一體化設(shè)計搞莺,客廳與餐廳動線相連息罗,擴(kuò)大了整個的空間視野。
* 與客廳無縫連接的是超大的觀景陽臺才沧,東南朝向迈喉,陽光充沛。
* 動靜分離的設(shè)計糜工,將客廳與臥室進(jìn)行有效的分離弊添,保證了私密性及舒適度。
* 主臥的落地窗設(shè)計捌木,提供了足夠的室內(nèi)的采光度油坝。
* 主臥旁邊的是干濕分離的衛(wèi)生間。
* 再旁邊就是兩個緊挨的房間刨裆,可按居家情況設(shè)計為兒童房澈圈、老人房或書房。");
        }

        public override void Show()
        {
            base.Show();
            ShowDetail();
        }
    }

經(jīng)過銷售人員這么一講解帆啃,然后往樣板房客廳的沙發(fā)上一坐瞬女,是不是立馬就有家的感覺?努潘!好诽偷,就這個戶型了。

上場景類:

static void Main(string[] args)
        {
            Console.WriteLine("裝飾模式:");
            Console.WriteLine("-------------------------------------------------");
            Console.WriteLine("先看毛坯房:");
            //未經(jīng)裝修的毛坯房
            var withoutDecoratorHouse = new WithoutDecoratorHouse()
            {
                Area = 80.0,
                Specification="三室一廳一衛(wèi)",
                Price = 8000
            };

            withoutDecoratorHouse.Show();
            Console.WriteLine("-------------------------------------------------");
            Console.WriteLine("再看樣板房:");
            //對毛坯房進(jìn)行裝修
            var decoratorHouse = new ModelHouse(withoutDecoratorHouse);
            decoratorHouse.Show();
            Console.WriteLine("-------------------------------------------------");
            Console.ReadLine();
        }
運行結(jié)果

總結(jié)

裝飾模式是通過Decorator(裝飾角色)構(gòu)造函數(shù)的注入對被裝飾者者的引用疯坤,來間接完成對被裝飾對象功能的動態(tài)添加报慕。

優(yōu)缺點:

優(yōu)點
裝飾類和被裝飾類可以獨立發(fā)展且不相互耦合。
裝飾模式是繼承關(guān)系的一個替代方案压怠。
裝飾模式可以動態(tài)地擴(kuò)展一個實現(xiàn)類的功能眠冈。
缺點
多層的裝飾的情況下,導(dǎo)致層層嵌套菌瘫,導(dǎo)致代碼緊耦合蜗顽。

應(yīng)用場景:

需要擴(kuò)展一個類的功能,或給一個類增加附加功能雨让。
需要動態(tài)地給一個對象增加功能雇盖,這些功能可以再動態(tài)地撤銷。
要為一批的兄弟類進(jìn)行改裝或加裝功能宫患,當(dāng)然是首選裝飾模式刊懈。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末这弧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子虚汛,更是在濱河造成了極大的恐慌匾浪,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卷哩,死亡現(xiàn)場離奇詭異蛋辈,居然都是意外死亡,警方通過查閱死者的電腦和手機将谊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進(jìn)店門冷溶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人尊浓,你說我怎么就攤上這事逞频。” “怎么了栋齿?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵苗胀,是天一觀的道長。 經(jīng)常有香客問我瓦堵,道長基协,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任菇用,我火速辦了婚禮澜驮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惋鸥。我一直安慰自己杂穷,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布卦绣。 她就那樣靜靜地躺著亭畜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪迎卤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天玷坠,我揣著相機與錄音蜗搔,去河邊找鬼。 笑死八堡,一個胖子當(dāng)著我的面吹牛樟凄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播兄渺,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼缝龄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叔壤,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤瞎饲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后炼绘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗅战,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年俺亮,在試婚紗的時候發(fā)現(xiàn)自己被綠了驮捍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡脚曾,死狀恐怖东且,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情本讥,我是刑警寧澤珊泳,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站囤踩,受9級特大地震影響旨椒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜堵漱,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一综慎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧勤庐,春花似錦示惊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至丈探,卻和暖如春录择,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背碗降。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工隘竭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人讼渊。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓动看,卻偏偏與公主長得像,于是被迫代替她去往敵國和親爪幻。 傳聞我的和親對象是個殘疾皇子菱皆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內(nèi)容