zoukankan      html  css  js  c++  java
  • 装饰者模式

    装饰者模式
    需要把所需的功能按照正确的顺序串联起来进行控制,动态的给一个对象添加一些额外的职责。
    装饰模式是利用SetComponent来对对象进行包装的,每一个装饰对象只需关心自己的功能,不需要关心如何被添加到对象链中。
    装饰模式是为已有功能动态添加其他功能的一种方式,优点是把类中的装饰功能从类中搬移,简化原有类,有效的把核心职责和装饰职责功能区分开来。

    调用装饰模式的主函数:

            static void Main(string[] args)
            {
                ConcreteComponent c = new ConcreteComponent();//核心功能类
                ConcreteDecoratorA d1 = new ConcreteDecoratorA();//装饰类1
                ConcreteDecoratorB d2 = new ConcreteDecoratorB();//装饰类2
                d1.SetComponent(c);
                d2.SetComponent(d1);
                d2.Opration();//会执行核心功能类+装饰类1+装饰类2
                Console.ReadKey();
            }

    核心功能类和装饰类继承的抽象类Component:

        public abstract class Component
        {
            public abstract void Opration();
        }

     核心类ConcreteComponent :

        public class ConcreteComponent : Component
        {
            public override void Opration()
            {
                Console.WriteLine("ConcreteComponent类的操作");
            }
        }
    装饰模式是利用SetComponent来对对象进行包装的,每一个装饰对象只需关心自己的功能,不需要关心如何被添加到对象链中。

    Decorator类实现了SetComponent方法,接受核心功能对象,在Decorator类的子类中重写Opration方法,实现功能的叠加。

        public abstract class Decorator : Component
        {
            protected Component component;

            public void SetComponent(Component component)
            {
                this.component = component;
            }
            public override void Opration()
            {
                if (component != null)
                {
                    component.Opration();
                }
            }
        }
     

    装饰类:(继承Decorator,拥有了SetComponent方法,来接受需要增加功能的对象,重写Opration方法就是增加功能的依据)

        public class ConcreteDecoratorA : Decorator
        {
            public override void Opration()
            {
                base.Opration();//就是通过这个语句实现功能块叠加
                Console.WriteLine("ConcreteDecoratorA类的操作");
            }
        }
        public class ConcreteDecoratorB : Decorator
        {
            public override void Opration()
            {
                base.Opration();//就是通过这个语句实现功能块叠加
                Console.WriteLine("ConcreteDecoratorB类的操作");
            }
        }

     


  • 相关阅读:
    无法重用Linq2Entity Query
    The Joel Test
    MSBuilder directly instead of default VSComplie with keyborad shotcut 原创
    客户端缓存(Client Cache)
    关于代码重构和UT的一些想法,求砖头
    ExtJS2.0实用简明教程 应用ExtJS
    Perl information,doc,module document and FAQ.
    使用 ConTest 进行多线程单元测试 为什么并行测试很困难以及如何使用 ConTest 辅助测试
    史上最简单的Hibernate入门简介
    汽车常识全面介绍 传动系统
  • 原文地址:https://www.cnblogs.com/lmfeng/p/2598670.html
Copyright © 2011-2022 走看看