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类的操作");
            }
        }

     


  • 相关阅读:
    LeetCode "Jump Game"
    LeetCode "Pow(x,n)"
    LeetCode "Reverse Linked List II"
    LeetCode "Unique Binary Search Trees II"
    LeetCode "Combination Sum II"
    LeetCode "Divide Two Integers"
    LeetCode "First Missing Positive"
    LeetCode "Clone Graph"
    LeetCode "Decode Ways"
    LeetCode "Combinations"
  • 原文地址:https://www.cnblogs.com/lmfeng/p/2598670.html
Copyright © 2011-2022 走看看