重温设计模式 --- 装饰器模式

装饰器模式是一种结构设计模式,用于在不修改原始对象的情况下,通过包装在装饰器对象中添加额外功能。它定义了与原始对象相同接口的装饰器,通过调用原始对象的方法来扩展行为。这种模式允许动态地添加、删除或替换对象的行为,遵循开放/封闭原则,但可能导致对象数量增加和复杂性提高。
摘要由CSDN通过智能技术生成

引言

装饰器模式是一种结构型设计模式,它允许在不改变原始对象的情况下,通过将其包装在一个装饰器对象中,来动态地添加额外的功能。

装饰器模式的核心思想是,将一个对象放在另一个对象的外面,以给原始对象添加新的行为。这个“另一个对象”就是装饰器(Decorator),它持有一个原始对象(Component)的引用,并实现与原始对象相同的接口。装饰器可以通过调用原始对象的方法,来执行自己的行为。这种方式可以动态地添加、删除或替换对象的行为,而不需要修改原始对象的代码。

基本类接口

定义一个基本对象接口或抽象类,称为Component,它定义了一些基本操作:

//定义基本对象接口
public  interface  IComponent
{
    void Operation();
}

基本类实现

定义一个实现IComponent接口的具体类:

//IComponent接口的实现类
public  class  ConcreteComponent : IComponent
{
    public void Operation()
    {
        Console.WriteLine("ConcreteComponent.Operation()");
    }
}

装饰器抽象

定义一个装饰器抽象类或接口,称为Decorator,它也实现了Component接口,并在其中添加了一些新的操作:

//装饰器抽象
public  abstract  class  Decorator : IComponent
{
    private IComponent component;

    public Decorator(IComponent component)
    {
        this.component = component;
    }

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

装饰器实现

//实现多个装饰器类
public  class  ConcreteDecoratorA : Decorator
{
    public ConcreteDecoratorA(IComponent component) : base(component)
    {
    
    }

    public override void Operation()
    {
        base.Operation();
        Console.WriteLine("ConcreteDecoratorA.Operation()");
    }
}

public  class  ConcreteDecoratorB : Decorator
{
    public ConcreteDecoratorB(IComponent component) : base(component)
    {
    }

    public override void Operation()
    {
        base.Operation();
        Console.WriteLine("ConcreteDecoratorB.Operation()");
    }
}

接着,我们可以创建并使用一个具有特定功能对象:

IComponent component = new ConcreteComponent();

IComponent decoratorA = new ConcreteDecoratorA(component);

IComponent decoratorB = new ConcreteDecoratorB(decoratorA);

decoratorB.Operation();

输出如下:

ConcreteComponent.Operation()

ConcreteDecoratorA.Operation()

ConcreteDecoratorB.Operation()

上文例子中,我们创建了一个基本对象ConcreteComponent,并创建了两个装饰器ConcreteDecoratorAConcreteDecoratorB,最后,我们使用这些装饰器来创建一个具有特定功能的对象,并调用它的操作方法。输出结果显示,这个对象实际上执行了多个操作,包括基本操作和添加的操作。

装饰器模式本身有两个缺点。首先,它可能会导致对象数量的增加,因为每个装饰器都需要一个单独的对象。其次,由于装饰器可以相互嵌套,在创建复杂的装饰器结构时可能会变得难以理解和维护。 

结论

装饰器模式的优点是它可以动态地添加对象的新行为,而无需改变其原始类。这样,我们可以通过组合不同的装饰器来创建多种对象变体,同时保持原始对象的完整性和一致性。且装饰器模式遵循开放/封闭原则,因为它允许我们添加新的功能,而无需修改现有代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值