设计模式07_装饰模式

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    abstract class Appearance
    {
        public int cost = 2;
        public abstract int get_cost();
        public abstract void Show();

    }
    class Coffee:Appearance
    {
        private string coffee_name;
        public override int get_cost()
        {
            return 15;
        }
        public Coffee(string name)
        {
            this.coffee_name=name;
        }
        public override void Show()
        {
            Console.WriteLine("一杯{0}添加",coffee_name);
        }
    }
    abstract class Finery:Appearance
    {
        protected Appearance component;
        public void Decorate(Appearance component)
        {
            this.component=component;
        }
        public override int get_cost()
        {
            if(component!=null)
            {
                this.cost+=component.get_cost();
            }
            return this.cost;
        }
        public override void Show()
        {
            if(component!=null)
            {
                component.Show();
            }
        }
    }
    class OreoCookies:Finery
    {
        public override void Show()
        {
            base.Show();
            Console.Write("OreoCookies ");
        }
    }

     class Almond :Finery
    {
        public override void Show()
        {
            base.Show();
            Console.Write("Almond  ");
        }
    }

     class Cashews :Finery
    {
        public override void Show()
        {
            base.Show();
            Console.Write("Cashews ");
        }
    }

     class pecan :Finery
    {
        public override void Show()
        {
            base.Show();
            Console.Write("pecan ");
        }
    }

     class raisin :Finery
    {
        public override void Show()
        {
            base.Show();
            Console.Write("raisin ");
        }
    }

      class ChocolateChip  :Finery
    {
        public override void Show()
        {
            base.Show();
            Console.Write("ChocolateChip  ");
        }
    }

      class Strawberry  :Finery
    {
        public override void Show()
        {
            base.Show();
            Console.Write("Strawberry  ");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Coffee coffee = new Coffee("拿铁咖啡");
            Console.WriteLine("\n第一个订单");
            Strawberry St = new Strawberry();
            ChocolateChip Cho = new ChocolateChip();
            raisin rai = new raisin();
            raisin rai2 = new raisin();
            St.Decorate(coffee);
            Cho.Decorate(St);
            rai.Decorate(Cho);
            rai2.Decorate(rai);
            rai2.Show();
            Console.WriteLine(rai2.get_cost());
            Console.Read();

        }
    }
}

posted on 2016-06-02 17:06  胖胖的乓乓  阅读(102)  评论(0编辑  收藏  举报

导航