Design patterns IV : Decorator/Wrapper Pattern

本文详细阐述了装饰器模式的概念、用途及其实现步骤,通过实例代码展示了如何使用装饰器模式来扩展已有类的功能。包括定义接口、实现类、包装类以及具体的包装实例,演示了如何通过构造器传递接口实例并重写方法来实现功能扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*

Author: Jiangong SUN

*/

Decorators provide a flexible alternative to subclassing for extending functionality.

public class DecoratorPattern
    {
         /*
         * decorator和wrapper是一个设计模式
         * 用途:用来扩展已有类的功能
         * 实现步骤:
         * 先定义一个interface,然后建立一个类继承这个接口,并实现接口里的方法
         * 建立一个包装类继承同一个接口,并在这个包装类的构造器中使用接口的实例做参数。
         * 建立实际包装类继承包装类,重写接口定义的方法,并可以创建自己特有的方法。
         */
        public interface IComponent
        {
            void Operation();
        }

        public class ConcreteComponent : IComponent
        {
            public void Operation()
            {
                Console.WriteLine("ConcreteComponent operation");
            }
        }

        public class Decorator : IComponent
        {
            private readonly IComponent _decoratedComponent;

            public Decorator(IComponent iComponent)
            {
                _decoratedComponent = iComponent;
            }

            public void Operation()
            {
                _decoratedComponent.Operation();
            }
        }

        public class ConcreteDecoratorA : Decorator
        {
            private string _addState;

            public ConcreteDecoratorA(Decorator decorator)
                : base(decorator)
            {
            }

            public new void Operation()
            {
                base.Operation();
                _addState = "New State";
                Console.WriteLine("ConcreteDecoratorA.Operation");
            }
            public void CustomOperation()
            {
                Console.WriteLine("ConcreteDecoratorA custom Operation");
            }
        }

        public static void Main()
        {
            ConcreteComponent concreteComponent = new ConcreteComponent();
            concreteComponent.Operation();

            Decorator decorator = new Decorator(concreteComponent);
            ConcreteDecoratorA concreteDecoratorA = new ConcreteDecoratorA(decorator);
            concreteDecoratorA.Operation();
            concreteDecoratorA.CustomOperation();

            Console.ReadKey();
        }
    }



reference:

http://en.wikipedia.org/wiki/Decorator_pattern

http://geekswithblogs.net/amaniar/archive/2012/02/10/a-simple-implementation-of-the-decorator-design-pattern-using-c-sharp.aspx

http://sourcemaking.com/design_patterns/decorator/c%2523

http://www.dofactory.com/Patterns/PatternDecorator.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值