JAVA中的装饰模式浅谈

原创 2013年12月02日 16:28:00

说起装饰模式,大家能联想到的应该是java中IO哪块的逻辑。下面给大家说说,我理解的装饰模式!

装饰模式由以下4个部分组成:

1.抽象构建角色:给出一个规范接口,以规范准备附加责任的对象。例(InputStream,OutputStream).

2.具体构建角色:定义一个附加责任的类。例(FileInputStream,FileOutputStream).

3.装饰角色:持有一个构建对象的引用,并定义一个与抽象构件接口一致的接口。例(FilterInputStream,FilterOutputStream).

4.具体装饰角色:负责给构件对象添上附加的责任。例(DataInputStream,DataOutputStram.BufferedInputStream,BufferedOutputStram).

 

 

下面给大家演示一下简单的代码:

(1).抽象构建角色

public interface Component {
	public void doSomething();//抽象构建角色

}


(2).具体构建角色

public class Decorator implements Component {
	
	private Component component;//装饰角色
	
	public Decorator(Component component){
		this.component = component;
	}

	@Override
	public void doSomething() {
		// TODO Auto-generated method stub
		component.doSomething();	

	}

}


3.装饰角色

public class ConcreteComponent implements Component {

	@Override
	public void doSomething() {//具体构建角色
		// TODO Auto-generated method stub
		System.out.println("功能A");

	}

}


(4).具体装饰角色A

public class ConcreteDecorator1 extends Decorator {
	public ConcreteDecorator1(Component component){//具体装饰角色
		super(component);
	}
	@Override
	public void doSomething() {
		// TODO Auto-generated method stub
		super.doSomething();
		this.doAnthorthing();
		
	}
	private void doAnthorthing(){
		System.out.println("功能B");
		
	}

}

(5).具体装饰角色B

public class ConcreteDecorator2 extends Decorator {
	
	public ConcreteDecorator2(Component component){//具体装饰角色
		super(component);
	}
	@Override
	public void doSomething() {
		// TODO Auto-generated method stub
		super.doSomething();
		this.doAnthorthing();
	}
	private void doAnthorthing(){
		System.out.println("功能C");
	}

}


 

测试类

public class ComponentTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//节点流
		Component component = new ConcreteComponent();
		//过滤流
		Component component1 = new ConcreteDecorator1(component);
		//过滤流
		Component component2 = new ConcreteDecorator2(component1);
		
		component2.doSomething();
		

	}

}


 

大家可以参考下!!

 

学习、探究Java设计模式——装饰者模式

定义装饰者模式:在不改变原类文件以及不使用继承的情况下,动态地将责任附加到对象上,从而实现动态拓展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。设计原则要使用装饰者模式,需要满...
  • a553181867
  • a553181867
  • 2016年08月03日 22:52
  • 4000

JAVA设计模式初探之装饰者模式

这个模式花费了挺长时间,开始有点难理解,其实就是 定义:动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活。 设计初衷:通常...
  • jason0539
  • jason0539
  • 2014年04月01日 09:07
  • 75220

Java装饰类的设计思想

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------- 概述 JAVA23种设计模式之一,英文叫De...
  • u013999337
  • u013999337
  • 2014年03月16日 23:59
  • 1247

Java 设计模式 装饰者模式

装饰者模式 在设计的时候,往往要给一个对象的功能进行一些修饰,对功能进行拓展和增强,以满足我们的需求。    举个例子,最近流行歌曲比赛,什么《中国好声音》,《中国好歌曲》什么的,对于一个参赛者而言...
  • u010349169
  • u010349169
  • 2014年02月09日 23:57
  • 5597

Java 代理模式和装饰者模式的区别

http://www.cnblogs.com/onlywujun/archive/2013/03/28/2985887.html 学习AOP时,教材上面都说使用的是动态代理,可是在印象中代理模式一...
  • ystyaoshengting
  • ystyaoshengting
  • 2016年02月02日 16:39
  • 1318

装饰模式的java实现例子

装饰模式:在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。...
  • pnjlc
  • pnjlc
  • 2016年09月29日 15:00
  • 2009

Java IO : 流,以及装饰器模式在其上的运用

流概述 Java中,流是一种有序的字节序列,可以有任意的长度。从应用流向目的地称为输出流,从目的地流向应用称为输入流。 Java的流族谱 Java的java.io包中囊括了整个流...
  • huaweitman
  • huaweitman
  • 2016年01月20日 09:49
  • 1786

java装饰器模式

意图:动态的将责任附加到对象上 什么时候使用: 1.在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责 2.处理那些可以撤销的职责 3.当不能采用生成子类的方式进行扩充时 结构图...
  • wuqingyidongren
  • wuqingyidongren
  • 2016年05月30日 14:42
  • 769

《java与设计模式》之装饰模式详解&Java IO中的装饰器模式

1 概述 在一个项目中,你会有非常多的因素考虑不到,特别是业务的变更,不时的冒出一个需求是很正常的情况。有三个继承关系的类:Father、Son、GrandSon,我们要在Son类上增强一些功能怎么办...
  • chs0113
  • chs0113
  • 2016年05月06日 19:42
  • 7412

JAVA IO之装饰器模式(Head first 设计模式之装饰器模式)

InputStream是IO中装饰器模式的顶层,现在我们讨论一下装饰器模式。顾名思义,动态的将责任附加到对象上,如要扩展功能,装饰者提供了比继承更加有弹性的方案。 装饰器模式:首先,装饰者和被装饰者...
  • wangzhenfei444
  • wangzhenfei444
  • 2016年06月20日 16:01
  • 552
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA中的装饰模式浅谈
举报原因:
原因补充:

(最多只允许输入30个字)