码迷,mamicode.com
首页 > 编程语言 > 详细

java(26) - 装饰模式

时间:2015-03-21 09:46:05      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:java

一.装饰模式:

      1).装饰模式是以客户端透明的方式扩展对象的功能,是以继承的关系的一个替代解决方案。

        2).装饰模式以客户端透明的方式动态的给一个对象附加上更多的责任。

        3).装饰模式可以在不创造更多子类的情况下将对象的功能加以扩展。

       在装饰模式中的角色:

       a).抽象构件角色(Component):给出一个抽象接口,以规范准备接收附加责任的对象。

       b).具体构件角色(Concrete Component):定义一个将要接收附加责任的类。

       c).装饰角色(Decorator):持有一个构件(Component)对象的引用,并定义一个与抽象构件接口一致的接口。

       d).具体装饰角色(Concrete Decorator):负责给构件对象附加责任。

实例:

抽象构件角色(Component):

<strong>public interface Component {

	public void doSomething();
	
}
</strong>

具体构件角色(Concrete Component):

public class ConcreteComponent implements Component{

	@Override
	public void doSomething() {

		System.out.println("功能A");
		
	}

}

装饰角色(Decorator):

public class Decorator implements Component{

	public Component component;
	
	public Decorator(Component component){
		
		this.component = component;
		
	}
	
	@Override
	public void doSomething() {
		// TODO Auto-generated method stub
		component.doSomething();
		
	}
}

具体装饰角色(Concrete Decorator):

public class ConcreteDecorator1 extends Decorator{

	public ConcreteDecorator1(Component component) {
		super(component);
	}
	
	public void doSomething(){
		
		super.doSomething();
	
		this.doAnotherThing();
		
	}

	public void doAnotherThing(){
	
		System.out.println("附加功能B");
		
	}
}
public class ConcreteDecorator2 extends Decorator{
	
	public ConcreteDecorator2(Component component) {
		super(component);
	}
	
	public void doSomething(){
		
		super.doSomething();
	
		this.doAnotherThing();
		
	}

	public void doAnotherThing(){
	
		System.out.println("附加功能C");
		
	}
}

附加两个功能。

测试类:

public class Test {

	public static void main(String[] args) {
		//这就是io中节点流被过滤流包装
		Component com = new ConcreteDecorator2(new ConcreteDecorator1(new ConcreteComponent()));
		
		com.doSomething();
		
	}
}

打印:

功能A
附加功能B
附加功能C


二.装饰模式的特点:

装饰模式在io流中是经常是用的模式,装饰模式的特点:1).装饰模式和真实对象有相同的接口。这样客户端对象就可以以和真实对象相同的方式和装饰对象交互。2).装饰对象包含一个真实对象的引用。3).装饰对象接收所有来自客户端的请求,它把这些请求转发给真实的对象。4).装饰对象可以在转发这些请求以前或以后增加一些附加功能,这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能,在面对对象的设计中,通常是通过继承来实现对给定功能的扩展。


    




java(26) - 装饰模式

标签:java

原文地址:http://blog.csdn.net/u010708662/article/details/44465051

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