专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 编程

装饰器形式的设计原理

发布时间:2011-06-30 11:27:41 文章来源:www.iduyao.cn 采编人员:星星草
装饰器模式的设计原理

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

 

      从以上图我们可以看到:最核心的类就是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了;

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: