码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式—装饰模式

时间:2015-04-21 09:49:37      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:代理   java   

装饰模式的英文原文是:Attach additional responsibilitities to an object dynamically keeping the same interface. Decorators provide a flexible alternative to subclassing for extending functionality. 意思是:动态的给一个对象添加一些额外的职责。就增加功能来说,装饰模式比生成子类更为灵活。

装饰模式有四个角色,分别是:

1、抽象构件角色:这个角色是被装饰角色的规范。

2、具体构件角色:该角色是具体被装饰的角色,实现抽象构件的接口。

3、装饰角色:这个角色有一个具体被装饰构件角色的对象的实例,并且实现了抽象构件的接口。

4、具体装饰角色:该角色具体执行对对象的装饰。

装饰模式类图:

技术分享

各个类的实现代码:

抽象构件:

package com.zz.decorator;
/**
 * 抽象构件
 * Copyright 2015年4月20日
 * created by txxs
 * all right reserved
 */
public interface Component {
	public void operation();
}
具体构件:

package com.zz.decorator;
/**
 * 具体构建
 * Copyright 2015年4月20日
 * created by txxs
 * all right reserved
 */
public class ConcreteComponent implements Component {
	@Override
	public void operation() {
		//业务代码
	}
}
装饰角色:

package com.zz.decorator;
/**
 * 装饰角色
 * Copyright 2015年4月20日
 * created by txxs
 * all right reserved
 */
public abstract class Decorator implements Component{
	private Component component = null;
	public Decorator(Component component){
		this.component = component;
	}
	public void operation(){
		this.component.operation();
	}
}
具体装饰角色:

package com.zz.decorator;
/**
 * 具体装饰角色
 * Copyright 2015年4月20日
 * created by txxs
 * all right reserved
 */
public class ConcreteDecorator extends Decorator {

	public ConcreteDecorator(Component component) {
		super(component);
	}
	//定义自己的方法
	private void method(){
		//业务代码
	}
	//重写operation方法
	public void operation(){
		this.method();
		super.operation();
	}
}
测试类:

package com.zz.decorator;
/**
 * 测试类
 * Copyright 2015年4月20日
 * created by txxs
 * all right reserved
 */
public class Client {

	public static void main(String[] args) {
		Component component = new ConcreteComponent();
		component = new ConcreteDecorator(component);
		component.operation();
	}

}
装饰模式的优点:

1、装饰模式可以动态的添加一个实现类的功能

2、装饰类和被装饰类可以独立,不会相互耦合。

3、Decorator模式与继承关系的目的都是要扩展对象的功能,但是Decorator可以提供比继承更多的灵活性。

实例:通过设计组装和升级大众CC来说明装饰模式,有一个VolkCC类实现Volk接口,设计一个CCDecorator实现Volk这个接口,在ConcreteCCDecorator这个具体装饰角色中进行功能的增加和重写。源码下载

实现效果:

技术分享

哈哈,正在学习中……

设计模式—装饰模式

标签:代理   java   

原文地址:http://blog.csdn.net/maoyeqiu/article/details/45156817

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!