`

java模式之装饰者模式

阅读更多

         装饰者模式在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还有很多的方面用到了这种设计模式

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics