Patrón de diseño C# --- Patrón de decorador

Patrón decorador

Patrón de decorador (Patrón de decorador) se refiere a extender dinámicamente la funcionalidad de un objeto sin cambiar el archivo de clase original y usando la herencia. Lo hace creando un objeto envolvente, una decoración, que envuelve el objeto real. También es un modelo estructural. Los objetos decorados tienen la misma interfaz que los objetos reales. De esta manera el objeto del cliente puede interactuar con el objeto decorado de la misma forma que el objeto real. El objeto decorado contiene una referencia al objeto real. El objeto decorado acepta todas las solicitudes de los clientes. Reenvía estas solicitudes al objeto real. Los objetos Decorator pueden agregar alguna funcionalidad adicional antes o después de reenviar estas solicitudes. Esto garantiza que, en tiempo de ejecución, se pueda agregar funcionalidad adicional externamente sin modificar la estructura de un objeto determinado. En el diseño orientado a objetos, las extensiones funcionales de una clase dada generalmente se logran a través de la herencia. El principio de diseño es combinar más y heredar menos.

using System;
using System.Text;
namespace ConsoleApplication
{
    //一般每个接口或类都写在单独的.cs文件中
    //本示例为了执行查看方便才写在一起  
    public abstract class AbstractCoder
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public abstract void Code();
    }
    /// 
    /// 继承+组合
    /// 装饰器的基类
    /// 继承了抽象类
    /// 
    public class BaseCoderDecorator : AbstractCoder
    {
        private AbstractCoder _Coder = null;//用了组合加override
        public BaseCoderDecorator(AbstractCoder coder)
        {
            this._Coder = coder;
        }
        public override void Code()
        {
            this._Coder.Code();
            //Console.WriteLine("****************");
            //基类装饰器必须是个空的行为  会重复
        }
    }
    /// 
    /// 父类是BaseStudentDecorator,爷爷类AbstractStudent
    /// 
    public class JuniorCoderDecorator : BaseCoderDecorator
    {
        public JuniorCoderDecorator(AbstractCoder coder)
            : base(coder)//表示父类的构造函数
        {
        }
        public override void Code()
        {
            Console.WriteLine("初始程序编写简单代码");
            base.Code();
        }
    }
    // 
    /// 父类是BaseCoderDecorator,爷爷类AbstractCoder
    /// 
    public class SeniorCoderDecorator : BaseCoderDecorator
    {
        public SeniorCoderDecorator(AbstractCoder coder)
            : base(coder)//表示父类的构造函数
        {
        }
        public override void Code()
        {
            Console.WriteLine("高级程序员编写复杂代码");
            base.Code();
        }
    }
    /// 
    /// 初始程序员
    /// 
    public class JuniorCoder : AbstractCoder
    {
        public override void Code()
        {
            Console.WriteLine("编写简单代码");
        }
    }
    /// 
    /// 高级程序员
    /// 
    public class SeniorCoder : AbstractCoder
    {
        /// 
        /// 写代码 
        /// 
        public override void Code()
        {
            Console.WriteLine("编写复杂代码");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            AbstractCoder coder = new JuniorCoder()
            {
                Id = 21,
                Name = "初学者"
            };
            coder = new JuniorCoderDecorator(coder);
            coder.Code();
            Console.ReadKey();
        }
    }
}

 

Supongo que te gusta

Origin blog.csdn.net/lwf3115841/article/details/131797523
Recomendado
Clasificación