设计模式(五)装饰模式

装饰模式

为已有模块动态添加更多功能的方式,比子类更加灵活。能够把类中起到装饰作用的逻辑从主逻辑中取出来,简化原有类。e.g. 奶茶可以添加布丁,珍珠...
需要注意的是装饰对象直接需要独立,各自关注各自的功能,否则会有添加的先后顺序影响。



    class MilkTea
    {
        private string name;

        public MilkTea()
        {
        }

        public MilkTea(string name)
        {
            this.name = name;
        }
        public virtual void Show()
        {
            Debug.LogFormat("{0}添加了", name);
        }
    }
    class Decorator : MilkTea
    {
        protected MilkTea person;
        public void Decorate(MilkTea de)
        {
            person = de;
        }

        public override void Show()
        {
            if (person != null)
            {
                person.Show();
            }
        }
    }
    class Test1 : Decorator
    {
        public override void Show()
        {
            base.Show();
            Debug.LogFormat("珍珠");
        }
    }
    class Test2 : Decorator
    {
        public override void Show()
        {
            base.Show();
            Debug.LogFormat("布丁");
        }
    }

    private void Awake()
    {
        MilkTea p = new MilkTea("奶茶");
        Test1 a = new Test1();
        Test2 b = new Test2();
        a.Decorate(p);
        b.Decorate(a);

        b.Show();
    }
posted @ 2020-01-02 18:53  ZeroyiQ  阅读(115)  评论(0编辑  收藏  举报