天天看點

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

以下内容轉載請注明來自"菩提樹下的楊過(http://blog.sqlsky.com)"

應用概述:

StarBuzz咖啡店有很多飲料,每種飲料都可以根據客戶需要加一些調料,比如深培咖啡可以加摩卡(或雙倍摩卡),而且某些飲料可以分為大中小杯,根據容量不同,售價不同,而且調料的價格根據飲料的容量不同而不同(比如大杯咖啡加糖要1元,中杯咖啡加糖要0.9元等)

又一設計原則:

對擴充開放,對修改關閉(本例中各種飲料都有共同的大中小杯特性--這是關閉的部分,另外各種具體子類飲料和調料的描述和價格都不相同--這是開放的部分)

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

飲料抽象類 

 1

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

using System;

 2

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

using System.Collections.Generic;

 3

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

using System.Linq;

 4

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

using System.Text;

 5

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

 6

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

namespace StarBazz

 7

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

{

 8

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

    /**//// <summary>

 9

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

    /// 抽象"飲料"類

10

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

    /// </summary>

11

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

    public abstract class Beverage

12

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

13

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        protected string description = "Unknown Beverage";

14

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        protected int _Size = (int)SizeEnum.Big;//初始化各種飲料均為"大杯"

15

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

16

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        public abstract string GetDescription();//抽象方法,由"飲料"的具體子類傳回各自的描述

17

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

18

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        public abstract double GetCost();//抽象方法,由"飲料"

19

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

20

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        /**//// <summary>

21

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        /// 傳回各種飲料的"大中小杯"

22

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        /// </summary>

23

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        /// <returns></returns>

24

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        public int GetSize() 

25

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

26

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            return _Size;

27

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        }

28

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

29

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

30

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        /// 設定各種飲料的"大中小杯"

31

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

32

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        /// <param name="size"></param>

33

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        public void SetSize(SizeEnum size) 

34

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

35

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            _Size = (int)size;

36

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

37

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

38

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

39

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

40

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        /// 大中小杯枚舉類型

41

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

42

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        public enum SizeEnum:int

43

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

44

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            Small =1,Middle=2,Big=3

45

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

46

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

    }

47

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

}

48

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

49

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

被裝飾元件之一:“濃咖啡”類

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

    /// “濃咖啡”類

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

    public class Espresso:Beverage

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        public Espresso() 

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            description = "Espresso";//初始化描述

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        /// 實作父類的抽象方法GetDescription()

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        public override string GetDescription()

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            return description;

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        /// 實作父類的抽象方法GetCost() -注:“濃咖啡”不論大中小杯,價格均為1.99元

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        public override double GetCost() 

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            return 1.99;

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

被裝飾元件之二:“深培咖啡類”類

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

    /// “HouseBlend”深培咖啡類

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

    public class HouseBlend:Beverage

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        public HouseBlend() 

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            description = "House Blend Coffee" ;

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        /// 實作父類的抽象方法

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            return description + "(" + (Beverage.SizeEnum)this.GetSize() + ")";

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        /// 實作父類的抽象方法(大杯0.89元,中杯0.79元,小杯0.68元)

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            double _cost = 0;

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            switch (base.GetSize())

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

                case (int)Beverage.SizeEnum.Big:

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

                    _cost = 0.89;

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

                    break;

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

                case (int)Beverage.SizeEnum.Middle:

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

                    _cost = 0.79;

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

                case (int)Beverage.SizeEnum.Small:

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

                    _cost = 0.68;

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

                default:

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            }

50

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

51

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            return _cost;           

52

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

53

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

54

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

55

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

56

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

裝飾者類: “摩卡”調料

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

    /// “摩卡”調料(用來給其它各種飲料做調味品)--裝飾者

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

    public class Mocha:Beverage

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        Beverage _beverage;//聲明一個内部公用的Beverage對象

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        /// 構造函數

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        /// <param name="beverage"></param>

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        public Mocha(Beverage beverage) 

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            _beverage = beverage;

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            description = _beverage.GetDescription();//儲存被裝飾對象的描述

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            _Size = _beverage.GetSize();//儲存被裝飾對象的"大中小杯"值

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        public override string GetDescription() 

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            return description + ",Mocha";           

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        /// 實作父類的抽象方法,計算價格(大杯飲料加一份Mocha需要0.2元,中杯飲料加一份Mocha需要0.15元,小杯飲料加一份Mocha需要0.1元)

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        public override double GetCost()

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            double _cost  =  this._beverage.GetCost();

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            switch (_beverage.GetSize())

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

                    _cost += 0.2;

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

                    _cost += 0.15;

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

                    _cost += 0.1;

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

57

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

58

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

59

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            return _cost;

60

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

61

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

62

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

63

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

64

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

最終測試

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

    class Program

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

        static void Main(string[] args)

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            //先來一份Expresso(濃咖啡),不要任何調料

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            Beverage _beverage = new Espresso();

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            Console.WriteLine(_beverage.GetDescription() + " Cost:" + _beverage.GetCost().ToString());//Espresso Cost:1.99

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            //再來一份HouseBlend(深培咖啡)

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            Beverage _beverage2 = new HouseBlend();

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            Console.WriteLine(_beverage2.GetDescription() + " Cost:" + _beverage2.GetCost().ToString());//House Blend Coffee(Big) Cost:0.89

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            //客戶補充說:隻要一份小杯的哦!

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            _beverage2.SetSize(Beverage.SizeEnum.Small);            

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            Console.WriteLine(_beverage2.GetDescription() + " Cost:" + _beverage2.GetCost().ToString());//House Blend Coffee(Small) Cost:0.68            

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            //客戶要求:我要加二份摩卡

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            Beverage _beverage3 = new Mocha(_beverage2);

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            Console.WriteLine(_beverage3.GetDescription() + " Cost:" + _beverage3.GetCost().ToString());//House Blend Coffee(Small),Mocha Cost:0.78

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            _beverage3 = new Mocha(_beverage3);

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            Console.WriteLine(_beverage3.GetDescription() + " Cost:" + _beverage3.GetCost().ToString());//House Blend Coffee(Small),Mocha,Mocha Cost:0.88

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

            Console.ReadLine();            

(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)
(Head First 設計模式)學習筆記(3) --裝飾者模式(StarBuzz咖啡店執行個體)

Espresso Cost:1.99

House Blend Coffee(Big) Cost:0.89

House Blend Coffee(Small) Cost:0.68

House Blend Coffee(Small),Mocha Cost:0.78

House Blend Coffee(Small),Mocha,Mocha Cost:0.88

繼續閱讀