装饰者模式

装饰者模式:动态地给一个对象添加一些额外的职责,就增加功能来说,Decorator模式比生成子类更为灵活。

  Decorator模式的工作原理是:可以创建始于Decorator对象(负责新的功能的对象)终于原对象的一个对象“链”。

适用性

在以下情况下可以使用 Decorator 模式:

  • 在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
  • 处理那些可以撤销的职责。
  • 当不能采用生成子类的方法进行扩充时。

缺点

  • Decorator 是一个透明的包装,其与 Component 还是有些差别的。
  • 采用 Decorator 模式进行系统设计往往会产生许多看上去类似的小对象。导致很难学习系统,排错也很困难。

效果

  • 比静态继承更灵活。
  • 避免在层次结构高层的类有太多的特征。

结构

例:

    class Program
    {
        static void Main(string[] args)
        {
            Car car=new Car();
            car.Operation();

            ComponentA componentA = new ComponentA(car);
            componentA.Operation();

            Console.WriteLine("
");

            Truck truck = new Truck();
            truck.Operation();

            ComponentB componentB=new ComponentB(truck);
            componentB.Operation();

            Console.ReadKey();
        }

        public class Car : Component
        {
            public override void Operation()
            {
                Console.WriteLine("我是普通的轿车,速度90km/h!
");
            }
        }

        public class Truck:Component
        {
            public override void Operation()
            {
                Console.WriteLine("我是普通的卡车,速度50km/h!
");
            }
        }

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

        public class ComponentA : Component
        {
            private Component _component;

            public ComponentA(Component component)
            {
                this._component = component;
            }

            public override void Operation()
            {                
                this._component.Operation();
                AddNewEngine();
                Console.WriteLine("增加了液氮推进器,速度狂飙到200km/h!
");
            }

            public void AddNewEngine()
            {
                Console.Write("增加液氮推进器!
");
            }
        }

        public class ComponentB:Component
        {
            private Component _component;

            public ComponentB(Component component)
            {
                _component = component;
            }

            public override void Operation()
            {
                
                _component.Operation();
                AddNewEngine();
                Console.WriteLine("增加了火箭推进器,速度狂飙到300km/h!
");
            }

            public void AddNewEngine()
            {
                Console.WriteLine("增加火箭推进器!
");
            }
        }
    }

  运行结果:

原文地址:https://www.cnblogs.com/superCow/p/3848702.html