靠着坚强的意志力,开始写第二篇笔记。

今天讲到装饰模式,书里提到跟建造者模式挺像的,但建造者适用于稳定的构造方式,而装饰模式则能够方便地动态增加功能。唔,建造者也忘得差不多了,基于一个良好的对比效果,明天就决定是你啦。

第二天,哈吉马路哟。

装饰模式

先说说我的理解,装饰模式最重要的就是装饰和主题都继承同一个类,或者装饰直接继承了主题,因此才有能装饰上去。

先给出个大致的结构图,我来操作一下具体代码


abstract class Component
{
    public abstract void Operation();
}
//具体对象,也就是被装饰的主体
class ConcreteComponent : Component
{
    public override void Operation()
    {
        Console.WriteLine("具体对象的操作:");
    }
}

abstract class Decorator : Component
{

    protected Component component;

    public void SetComponent(Component component)
    {
        this.component = component;
    }
    public override void Operation()
    {
        if (component != null)
        {
            component.Operation();
        }
        
    }
}

class ConcreteDecoratorA : Decorator
{
    private string addState;
    public override void Operation()
    {
        base.Operation();
        //new Operation
        addState="New State";
        Console.WriteLine("具体装饰对象A的操作");
    }
}
class ConcreteDecoratorB : Decorator
{
    
    public override void Operation()
    {
        base.Operation();
        //new Operation
        AddBehavior();
    }
    private void AddBehavior()
    {

    }
}

//客户端如下(java)
// static void Main(string[] args)
// {
//     ConcreteComponent c=new ConcreteComponent();
//     ConcreteDecoratorA d1=new ConcreteDecoratorA();
//     ConcreteDecoratorB d2=new ConcreteDecoratorB();

//     d1.SetComponent(c);
//     d2.SetComponent(d1);
//     d2.Operation();

// }

书里举到的具体例子是小菜扮靓,到时候想设计模式就全靠这些例子了。

跟之前的同样没什么变化,直接套用模式即可。

您必须 登录 才能发表评论