• 装饰模式


    定义:装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能

    例子:假设现在有个中国人要体现出他会说英文和日文,这时候怎么办?

      public abstract class People 
        {
            public abstract void Say();
        }
        public class Chinese : People
        {
            public override void Say()
            {
                Console.WriteLine("我是中国人");
            }
        }

    如果体现说日文的话,要重新再写一个子类,如果是N个就要写N个子类,显得不合理。

    改造

      public abstract class People
        {
            public abstract void say();
        }
    
        public class Chinese : People
        {
            public override void say()
            {
                Console.WriteLine("我是中国人");
            }
        }
    
        public abstract class Decorator : People
        {
            public People people;
            public Decorator(People p)
            {
                this.people = p;
            }
    
            public override void say()
            {
                people.say();          
            }
        }
    
        public class English : Decorator
        {
            public English(People p) : base(p)
            {
            }
            public override void say()
            {
                base.say();
                //新的行为
                SayEnglish();
            }
    
            public void SayEnglish()
            {
                Console.WriteLine("我会讲英语");
            }
        }
    
        public class Jan : Decorator
        {
            public Jan(People p) : base(p)  
            {
            }
    
            public override void say()
            {
                base.say();
                SayJan();
            }
    
            public void SayJan()
            {
                Console.WriteLine("我会讲日文");
            }
        }
    

    发现使用装饰模式可以减少类的实现,也可以实现代码组合:例如:

    Jan j = new Jan(new English(new Chinese()));
                j.say();

    English它继承了Decorator类又构造了people,我们实例化Englist也会传入一个抽象people(创建中国人的实例)进来,这样我们就可以调用Say和SayEnglish方

    由此可见:装饰模式的好处:当系统需要有新的功能的时候,向旧的类添加新的代码,新加的代码往往会装饰原来类的核心职责和主要行为。

    优点:有效的将类中的核心职责和装饰功能区分开了,而且可以去除相关类中重复的装饰逻辑。

    
    
    
  • 相关阅读:
    接口与实现分离
    C++的explicit关键字
    C++的类型转换
    使用catch做单元测试简介
    C++可调用对象与函数表
    在sublime中使用cppcheck
    你需要的代码静态检查
    构造析构与拷贝赋值那些事
    c++的关联容器入门(map and set)
    【致敬程序猿】
  • 原文地址:https://www.cnblogs.com/liu23/p/9065195.html
Copyright © 2020-2023  润新知