• Decorate模式 组合


    装饰:修饰

    Class Person     // 人有名字和形象。一个人逐渐发展,形象不断完善,如何避免多重继承?

    Class PersonWrapper :Person  //包装类,对人进行修饰,专门用于扩展包装

    //他可能硬汉,可能柔情,可能博学,可能多金...也可能既硬汉柔情,又博学多金...(完美的化身)

     class PersonYingHan:PersonWrapper   //硬汉包装类

     class PersonRouQing:PersonWrapper  //柔情包装类

     class PersonLearned:PersonWrapper  //博学包装类

     class PersonRich:PersonWrapper       //多金包装类

    //实现源码

    namespace DecorateMethod
    {
        class Program
        {
            static void Main(string[] args)
            {
                Person p = new Person("小马");

                PersonYingHan yh = new PersonYingHan(p);
                yh.Show();

                PersonLearned bx = new PersonLearned(p);
                bx.Show();

                PersonRouQing rq = new PersonRouQing(p);
                rq.Show();

                PersonRich wlw = new PersonRich(p);
                wlw.Show();

                Console.WriteLine("*****牛比、不断升级的小马*****");

                Person p2 = new Person("小马");                     //以下体现Decorate模式精华! 扩展如此easy!     

                PersonYingHan PersonLevel1 = new PersonYingHan(p2);
                PersonRouQing PersonLevel2 = new PersonRouQing(PersonLevel1);
                PersonLearned PersonLevel3 = new PersonLearned(PersonLevel2);
                PersonRich PersonLevel4 = new PersonRich(PersonLevel3);

                PersonLevel4.Show();

                Console.ReadLine();
            }
        }
        class Person
        {
            public Person()
            { }

            private string name;
            public Person(string name)
            {
                this.name = name;
            }

            public virtual void Show()
            {
                Console.WriteLine("装扮的{0}:", name);
            }
        }
        class PersonWrapper:Person
        {
            protected Person component;
            public PersonWrapper(Person component)
            {
                this.component = component;
            }

            public override void Show()
            {
                if (component != null)
                {
                    component.Show();
                }
            }
        }
        class PersonYingHan:PersonWrapper
        {
            public PersonYingHan(Person p)
                :base(p)
            {

            }
            public override void Show()
            {
                Console.WriteLine("硬汉形象!");
                base.Show();
            }
        }
        class PersonRouQing:PersonWrapper
        {
            public PersonRouQing(Person p)
                :base(p)
            {

            }
            public override void Show()
            {
                Console.WriteLine("温柔形象!");
                base.Show();
            }
        }
        class PersonLearned:PersonWrapper
        {
            public PersonLearned(Person p)
                :base(p)
            {

            }
            public override void Show()
            {
                Console.WriteLine("博学多才形象!");
                base.Show();
            }
        }
        class PersonRich:PersonWrapper
        {
            public PersonRich(Person p)
                :base(p)
            {

            }
            public override void Show()
            {
                Console.WriteLine("钻石王老五形象!");
                base.Show();
            }
        }
    }

  • 相关阅读:
    企业微信开发基本步骤
    简单的企业微信开发 前后端
    真分页
    企业微信“三次握手”
    Android项目的图标
    Android项目的目录结构
    Android系统提供了哪些东西,供我们可以开发出优秀的应用程序
    Android中的四层架构,五块区域
    MySQL中的concat函数
    Activity生命周期
  • 原文地址:https://www.cnblogs.com/MayGarden/p/1521417.html
Copyright © 2020-2023  润新知