您的位置:首页 > 编程语言 > Java开发

java装饰模式

2016-01-01 10:22 567 查看
在java的IO中就是运用装饰模式设计的。一层装饰一层

如:DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("data.txt")));

装饰模式的组成:1、抽象构件角色:相当java.io中的OutputStream或者是InputStream

2、具体构件角色:相当于java.io中的FileInputStream或者是FileOutputStream

3、抽象装饰角色:持有一个构件(Component)对象的引用,并定义一个与抽象构件接口一致的接口(即该角色继承或实现抽象构件角色)相当于java.io中的FilterInputStream或FilterOutputStream。

4、具体装饰角色:负责给构件对象添加附加功能。相当于java.io的BufferedInputStream或BufferedOutputStream。

代码实现如下:

/**
*定义抽象构件角色,并定义一个方法
*/
public interface Component {

public void doSomething();
}


/**
* 定义具体构件角色,实现方法
*/
public class ConcreteComponent implements Component {

@Override
public void doSomething() {
System.out.println("FileInputStream");
}

}


/**
* 定义抽象装饰角色,持有构件对象的引用,并定义一个与抽象构件接口一致的接口(即该角色继承或实现抽象构件角色)
* @author acer
*
*/
public class Derector implements Component{

private Component component;

public Derector(Component component){
this.comonent = component;
}

@Override
public void doSomething() {
component.doSomething();
}
}


/**
* 定义具体装饰角色,并添加附加功能
* @author acer
*
*/
public class ConcreteDerector1 extends Derector {

public ConcreteDerector1(Compenent component) {
super(component);
}

@Override
public void doSomething() {
super.doSomething();
doAnything();
}

public void doAnything(){
System.out.println("DataInputStream");
}

}


/**
* 装饰模式,客户端测试
*
* @author acer
*
*/
public class Client {
public static void main(String[] args) {
Component component1 = new ConcreteComponent();

Component component2 = new ConcreteDerector1(component1);//构建DataInputStream

component2.doSomething();
}
}


输出结果:

FileInputStream
DataInputStream
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: