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。
代码实现如下:
输出结果:
FileInputStream
DataInputStream
如: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
相关文章推荐
- MyEclipse和Eclipse区别与联系
- Java 48个关键字
- spring-framework-3.2.4与hibernate-release-4.3.5下使用HibernateDaoSupport抛出异常
- Java 模拟队列(一般队列、双端队列、优先级队列)
- Android N 将替代使用 OpenJDK
- [Eclipse] Importerror no module named pwd-----getpass.getuser()
- Java注解实践
- Java注解实践
- Java注解实践
- Java设计模式——六大原则
- 记录4种解析xml字符串的方法
- java定时器
- Java多线程学习(单一线程)
- java第二阶段学习day4
- java第二阶段学习day5
- java学习第二阶段day6
- Spring MVC配置
- java的泛型数组
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(八)之Reusing Classes
- ConcurrentHashMap分析