装饰模式(Decorator Pattern)

借用一张百度图片,我们在装修完房屋的后会在家里买一些点缀的家具,比如说客厅里面贴一些壁纸、挂上一些照片、摆上沙发茶几、弄几个盆栽...等等,这样一个温馨的家完成了。

装饰模式是一种用于代替继承的技术,它通过一种无须定义子类的方式给对象动态增加职责,使用对象之间的关联关系取代继承关系,在装饰模式中引入一个装饰类,这个类既可以调用待装饰方法也可以新增新的方法,来扩展原有的类的功能。

装饰者模式(Decorator Pattern):动态地给一个对象增加额外的职责,就扩展功能而言,转世模式提供了一种比使用子类更加灵活的代替方案

装饰者模式的结构

Component(抽象构件):它是具体构件和抽象装饰类共同的父类,声明在具体构件中实现的业务,它的引入可以使客户端以一致的方式处理未被装饰的对象以及装饰之后的对象,实现客户端的透明操作。

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

ConcreteComponent(具体构件):它是抽象构件的具体子类,用于定义具体的构件对象,实现了在抽象构件的方法,装饰类可以给它增加额外的指责方法。

class ConcreteComponent : Component
{
    public override void Operation()
    {
    }
}

Decorator(抽象装饰类):它也是抽象构件的子类,用于给具体构件增加职责,它维护一个指向抽象构件对象的引用,对其装饰子类给予装饰方法

class Decorator : Component
{
    public Component component;
    public Decorator(Component component)
    {
        this.component = component;
    }

    public override void Operation()
    {
        component.Operation();
    }
}

ConcreteDecorator(具体装饰类):实现抽象装饰的方法,向构件添加新的装饰职责,扩展装饰类的新方法。

class ConcreteDecorator : Decorator
{
    private string addedState;

    public ConcreteDecorator(Component component):base(component)
    {
    }

    public override void Operation()
    {
        base.Operation();
        AddedBehavior();
    }

    public void AddedBehavior()
    {
        Console.WriteLine("扩展方法");
    }
}

使用:

Component component, decorator;
component = new ConcreteComponent();
decorator = new ConcreteDecorator(component);
decorator.Operation();
扫描二维码关注公众号,回复: 11283126 查看本文章

猜你喜欢

转载自blog.csdn.net/mango_love/article/details/94218932