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

java模式之装饰者模式

2016-01-09 17:20 387 查看
         装饰者模式在java的设计模式中属于比较重要和常见的模式,在java的IO设计就设计到很多的装饰者模式。从最简单的装饰者模式开始说起。

         首先定义一个接口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还有很多的方面用到了这种设计模式

 

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