zoukankan      html  css  js  c++  java
  • 设计模式(五)装饰模式

    装饰模式

    为已有模块动态添加更多功能的方式,比子类更加灵活。能够把类中起到装饰作用的逻辑从主逻辑中取出来,简化原有类。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();
        }
    
  • 相关阅读:
    Poj3126
    Poj1426
    2806 红与黑
    3100 蜗牛
    1225 八数码难题
    2549 自然数和分解
    2547 东方辉针城
    2928 你缺什么
    1629 01迷宫
    1029 遍历问题
  • 原文地址:https://www.cnblogs.com/ZeroyiQ/p/12134643.html
Copyright © 2011-2022 走看看