java模式之装饰者模式
2016-01-09 17:20
387 查看
装饰者模式在java的设计模式中属于比较重要和常见的模式,在java的IO设计就设计到很多的装饰者模式。从最简单的装饰者模式开始说起。
首先定义一个接口Base
在接口中定义一个方法doThings1();
再来定义一个被包装类
然后定义一个包装类
最后测试类
来看下测试结果:
I am wrapper class 2
I am wrapper class1
I am wrapper class 2
这是常见的设计模式,包括在动态代理中也会用到这个模式的思想,只不过动态代理设计到源代码编译会比较复杂。
在javaIO设计模式中,很容易看到这一个模式的设计身影
┌BufferedInputStream
├DataInputStream
┌FilterInputStream┼LineNumberInputStream
├FileInputStream └PushbackInputStream
├ByteArrayInputStream
┌InputStream──┼PipedInputStream
│ ├SequenceInputStream
│ ├StringBufferInputStream
│ └ObjectInputStream ┌BufferedOutputStream
│ ┌FilterOutputStream┼DataOutputStream
Object┤ ├FileOutputStream └PrintStream
├OutputStream──┼ByteArrayOutputStream
├File ├PipedOutputStream
├FileDescriptor └ObjectOutputStream
├ObjdecStreamClass
├RandomAccessFile
└StreamTokenizer
我们常见使用的BufferedInputStream buff=new BufferedInputStream(new FileInputStream(""));这句话就使用了装饰者模式,见微知著,javaIO还有很多的方面用到了这种设计模式
首先定义一个接口Base
package com.luchi.model.wrapper; public interface Base { public void doThings1(); }
在接口中定义一个方法doThings1();
再来定义一个被包装类
package com.luchi.model.wrapper; public class WrapperCLass1 implements Base{ @Override public void doThings1() { // TODO Auto-generated method stub System.out.println("I am wrapper class1"); } }
然后定义一个包装类
package com.luchi.model.wrapper; public class WrapperClass2 implements Base{ private Base baseObject; public WrapperClass2(Base baseObject){ this.baseObject=baseObject; } @Override public void doThings1() { // TODO Auto-generated method stub System.out.println("I am wrapper class 2"); baseObject.doThings1(); System.out.println("I am wrapper class 2"); } }
最后测试类
package com.luchi.model.wrapper; public class TestWrapper { public static void main(String[]args){ WrapperCLass1 wrapper1=new WrapperCLass1(); WrapperClass2 wrapper2=new WrapperClass2(wrapper1); wrapper2.doThings1(); } }
来看下测试结果:
I am wrapper class 2
I am wrapper class1
I am wrapper class 2
这是常见的设计模式,包括在动态代理中也会用到这个模式的思想,只不过动态代理设计到源代码编译会比较复杂。
在javaIO设计模式中,很容易看到这一个模式的设计身影
┌BufferedInputStream
├DataInputStream
┌FilterInputStream┼LineNumberInputStream
├FileInputStream └PushbackInputStream
├ByteArrayInputStream
┌InputStream──┼PipedInputStream
│ ├SequenceInputStream
│ ├StringBufferInputStream
│ └ObjectInputStream ┌BufferedOutputStream
│ ┌FilterOutputStream┼DataOutputStream
Object┤ ├FileOutputStream └PrintStream
├OutputStream──┼ByteArrayOutputStream
├File ├PipedOutputStream
├FileDescriptor └ObjectOutputStream
├ObjdecStreamClass
├RandomAccessFile
└StreamTokenizer
我们常见使用的BufferedInputStream buff=new BufferedInputStream(new FileInputStream(""));这句话就使用了装饰者模式,见微知著,javaIO还有很多的方面用到了这种设计模式
相关文章推荐
- java并发编程学习笔记1
- java并发编程学习笔记2
- java模式之观察者模式
- java并发编程学习笔记之线程池等源码小析
- java 并发编程之同步器
- eclipse使用git遇到的单词
- Java模式之单例模式
- Struts2类型转换学习笔记
- springmvc之处理模型数据之map
- springMvc+MyBatis+Maven配置和log4j相似的Logback
- struts2 @Action给方法注解
- struts2 @Action给方法注解
- Spring MVC ModelAndView 简述
- springmvc之@modelAttribute
- springmvc之SessionAttritubes注解的引发的异常
- InputEvent .java
- HashTable的数组和连接两种实现方法(Java版本号)
- 用Notepad++写的java程序加注释报错问题
- java安装jdk时不能安装jre
- java入门学习(3)—循环,选择,基础算法,API概念