黑马程序员技术交流社区

标题: 装饰设计么模式 [打印本页]

作者: 池中月    时间: 2015-7-5 18:12
标题: 装饰设计么模式

装饰设计模式

1.装饰设计模式:

       如:BufferedStream(InputStream in);

        BufferedStream是基于InputStream的装饰类。


2、装饰和继承的区别:



  1. *
  2. * 自定义一个带行号的装饰类MyLineNumberReader
  3. */

  4. package unit15;

  5. import java.io.*;

  6. class MyLineNumberReader extends MyBufferedReader{
  7.         private Reader r;
  8.         private int lineNumber;

  9.         MyLineNumberReader(Reader r) {//根据多态思想,使用Reader作为参数对象类
  10.                 super(r);
  11.                
  12.         }
  13.         public String MyLineNumberReaderLine() throws IOException{
  14.                      lineNumber++;
  15.                
  16.                      return super.MyReadLine();               
  17.         }
  18.         public void setLineNumber(int lineNumber){
  19.                 this.lineNumber = lineNumber;
  20.         }
  21.         public int getLineNumber(){
  22.                 return lineNumber;
  23.         }
  24.         public void myClose() throws IOException{
  25.                 r.close();
  26.         }
  27. }


  28. public class MyLineNumberTest {
  29.         public static void main(String args[]){
  30.                
  31.                 try {
  32.                         FileReader fr = new FileReader("src/unit15/FileWriterTest.java");
  33.                         MyLineNumberReader mlr = new MyLineNumberReader(fr);
  34.                         String str = null;
  35.                         while((str=mlr.MyLineNumberReaderLine())!=null){
  36.                                 System.out.println(str);
  37.                         }
  38.                         mlr.MyClose();
  39.                        
  40.                 } catch (IOException e) {
  41.                         // TODO Auto-generated catch block
  42.                         e.printStackTrace();
  43.                 }

  44.                
  45.         }

  46. }
复制代码

3、装饰设计模式的应用在IO输入/输出中最常见,其中有两个比较重要:


这种方式在键盘输入输出中非常适用:

示例:

  1. package unit15;
  2. import java.io.*;

  3. public class KeyboardTest {
  4.         public static void main(String args[]){
  5.                 InputStream fis = System.in;
  6.                 StringBuilder s = new StringBuilder();
  7.                 while(true){
  8.                         try {
  9.                                 int ch = fis.read();
  10.                                 if(ch =='\r')
  11.                                         continue;
  12.                                 if(ch=='\n'){
  13.                                         String str = s.toString();
  14.                                         if("over".equalsIgnoreCase(str))
  15.                                                 break;
  16.                                         System.out.println(s.toString());
  17.                                         s.delete(0, s.length());//是字符串不连续显示
  18.                                 }               
  19.                                 else
  20.                                         s.append((char)ch);
  21.                         } catch (IOException e) {
  22.                                 // TODO Auto-generated catch block
  23.                                 e.printStackTrace();
  24.                         }
  25.                        
  26.                 }
  27.         }
  28.        
  29.        
  30. }
复制代码





作者: 1962491040    时间: 2015-7-6 16:34
....................................




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2