装饰器模式的设计原理

装饰器模式是一种设计模式,用于动态地给对象添加额外职责,相比继承,它提供了更大的灵活性。核心类Decorator继承了需要装饰的类,并持有该类对象。在Decorator的Operation方法中,调用被装饰类的方法。ConcreteDecoratorA和ConcreteDecoratorB是具体装饰类,它们在Operation方法中实现特定化操作,同时调用父类方法以保持一致的行为。
摘要由CSDN通过智能技术生成

         什么是装饰器模式?动态地给一个对象添加一些额外的工作职责,就增加功能来说,装饰器模式比继承的子类更灵活。

 

      从以上图我们可以看到:最核心的类就是Decorator类;它在中间扮演中关键的作用。在继承需要包装类的基础上,其也私有了一个需要装饰类的对象;为什么我们需要继承需要装饰的类呢?我们可以看到在时间调用的时候,我们的方法可以实现我被装饰类的方法一样的调用。我们在Decorator类中的Operation()方法放中,调用被装饰的类的方法。我们的具体的ConcreteDecoratorA 和ConcreteDecoratorB 则是具体的装饰类,我们可以在该类的Operation()方法中去特殊化一些操作(注意:这个地方在注意的时候,需要调用父类的方法:base.Operation()).

    我们先贴出代码,后续再做分析:

//Component 类
abstract class Component
{
	public abstract Operation();
}

//ConcreteComponent 类
class ConcreteComponent :Component
{
    public override void Operation()
	{
		Console.WriteLine("具体对象的操作");
	}
}

//Decorator 类
abstract class Decorator:Component
{
	protected Component component;
	//设定具体的虚包装的类对象
	public void setComponent(Component component)
	{
		this.component=component;
	}
	public  override void Operation()
	{
		if(component!=null)
		{
           component.Operation();
		}
	}
}
// ConcreteDecoratorA 类
class ConcreteDecoratorA:Decorator
{
	 private string addedState;
	//在继承的过程中拥有了setComponent方法;
    public  override void Operation()
	{
		base.Operation();
		//执行此装饰器特殊的指令
		addedState="XXXXXXX";

	}
}
//ConcreteDecoratorB 类
class ConcreteDecoratorB:Decorator
{
	//在继承的过程中拥有了setComponent方法;
    public  override void Operation()
	{
		AddedBehavior();//执行特殊的指令
		base.Operation();

	}
	public void AddedBehavior()
	{
		//具体特殊代码的编写处
	}
}


//客户端
class  
{
	public 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();

	}
}
        从客户端代码部分,我们可以看到:装饰模式实际上就是用setComponent方法来进行对象的包装;这样实现了装饰对象和如何使用装饰对象分离了;每个装饰的对象只需要关心自己的功能就OK了;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值