<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            java語言

            java設計模式:裝飾模式

            時間:2025-04-09 09:06:51 java語言 我要投稿
            • 相關推薦

            java設計模式:裝飾模式

              導語:Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。下面我們來看看裝飾模式,希望對大家有所幫助。

              裝飾模式(Decorator Pattern):

              在不必改變原類文件和使用繼承的情況下,動態地擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。

              特點:

              (1) 裝飾對象和真實對象有相同的接口。這樣客戶端對象就能以和真實對象相同的方式和裝飾對象交互

              (2) 裝飾對象包含一個真實對象的引用(reference)

              (3) 裝飾對象接受所有來自客戶端的請求。它把這些請求轉發給真實的對象。

              (4) 裝飾對象可以在轉發這些請求以前或以后增加一些附加功能。這樣就確保了在運行時,不用修改給定對象的結構就可以在外部增加附加的功能。在面向對象的設計中,通常是通過繼承來實現對給定類的功能擴展。

              ★ 場景和問題

              在不對原有對象類進行修改的基礎上,如何給一個或多個已有的類對象提供增強額外的功能?

              裝飾模式就可以實現該功能。同時繼承原有類,也能實現該功能

              這里模擬實現BufferReader中的readLine()方法,模擬一個帶緩存的myRead()方法,對原有的read()方法進行增速

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            26
            27
            28
            29
            30
            31
            32
            33
            34
            35
            36
            37
            38
            39
            40
            41
            42
            43
            44
            45
            46
            47
            48
            49
            50
            51
            52
            53
            54
            55
            56
            57
            58
            package cn.hncu.pattern.decorator.v1;          
            import java.io.FileReader;          
            import java.io.IOException;          
            public class MyBufferedReader {          
               private FileReader r; //封裝一個對象          
                         
               private char[] cbuf = new char[1024];          
               private int count=0; //記錄當前緩沖區中字符的個數          
               private int pos=0; //數組元素的下標(當前讀取的位置)          
                         
               public MyBufferedReader(FileReader r ){          
                   this.r = r;          
               }          
                         
               public int myRead() throws IOException {          
                   //對read()方法的功能加強          
                   if(count<=0){          
                       count = r.read(cbuf);          
                       if(count==-1){          
                           return -1;//代表讀取到文件末尾          
                       }          
                       pos=0;          
                   }          
                             
                   char ch = cbuf[pos];          
                   count--;          
                   pos++;          
                             
                   return ch;          
               }          
                         
               public String myReadLine() throws IOException{          
                   //模擬readLine()方法          
                   StringBuilder sb = new StringBuilder();          
                   int ch=0;          
                   while( (ch=myRead())!=-1 ){          
                       if(ch==' '){          
                           continue;          
                       }          
                       if(ch==' '){          
                           return sb.toString();          
                       }          
                                 
                       sb.append((char)ch);          
                   }          
                   if(sb.length()!=0){          
                       return sb.toString();          
                   }          
                   return null;          
               }          
                         
               public void myClose() throws IOException{          
                   r.close();          
               }          
                         
            }          

              a.txt

            1
            2
            3
            4
            5
            ?sd2332uew          
            wekjewkjewjk          
            dfiuewi3223          
            ——————————Over----------          

              測試

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            26
            27
            28
            29
            30
            31
            32
            33
            34
            35
            36
            37
            38
            39
            40
            41
            42
            43
            44
            45
            46
            47
            48
            49
            50
            51
            52
            53
            54
            55
            56
            57
            58
            59
            60
            61
            62
            63
            64
            65
            66
            67
            68
            69
            70
            71
            72
            73
            74
            75
            76
            77
            78
            79
            80
            81
            82
            83
            84
            85
            86
            87
            package cn.hncu.pattern.decorator.v1;          
            import java.io.BufferedReader;          
            import java.io.DataInputStream;          
            import java.io.FileNotFoundException;          
            import java.io.FileReader;          
            import java.io.IOException;          
            import org.junit.Test;          
            public class TestMyBufferedReader {          
                         
               ////////////1 測試對read()的增強//////////////////////          
                         
               @Test          
               public void bufferedReaderDemo() throws Exception{          
                   //javaAPI中的類          
                   FileReader r = new FileReader("a.txt");          
                   BufferedReader br = new BufferedReader(r);          
                   int ch=0;          
                   while( (ch=br.read())!=-1){          
                       System.out.print((char)ch);          
                   }          
                   br.close();          
               }          
               /* 測試結果:          
                * ?sd2332uew          
                * wekjewkjewjk          
                * dfiuewi3223          
                *          
                * ——————————Over----------          
                */          
               @Test          
               public void myBufferedReaderDemo() throws Exception{          
                   //我們自己寫的類          
                   FileReader r = new FileReader("a.txt");          
                   MyBufferedReader br = new MyBufferedReader(r);          
                   int ch=0;          
                   while( (ch=br.myRead())!=-1){          
                       System.out.print((char)ch);          
                   }          
                   br.myClose();          
               }          
               /* 測試結果:          
                * ?sd2332uew          
                * wekjewkjewjk          
                * dfiuewi3223          
                *          
                * ——————————Over----------          
                */          
                         
               ///////////2 測試對readLine()的增強/////////////////////          
               @Test          
               public void testBufferedReadLineDemo() throws IOException{          
                   //javaAPI中的類          
                   BufferedReader br =new BufferedReader( new FileReader("a.txt"));          
                   String str=null;          
                   while( (str=br.readLine())!=null ){          
                       System.out.println(str);          
                   }          
                   br.close();          
               }          
               /* 測試結果:          
                * ?sd2332uew          
                * wekjewkjewjk          
                * dfiuewi3223          
                *          
                * ——————————Over----------          
                */          
               @Test          
               public void testMyBufferedReadLineDemo() throws IOException{          
                   //我們自己寫的類          
                   MyBufferedReader br =new MyBufferedReader( new FileReader("a.txt"));          
                   String str=null;          
                   while( (str=br.myReadLine())!=null ){          
                       System.out.println(str);          
                   }          
                   br.myClose();          
               }          
               /* 測試結果:          
                * ?sd2332uew          
                * wekjewkjewjk          
                * dfiuewi3223          
                *          
                * ——————————Over----------          
                */          
            }          

            【java設計模式:裝飾模式】相關文章:

            java設計模式:多例模式08-12

            java設計模式:工廠模式05-27

            java設計模式:DAO模式03-13

            JAVA設計模式之單例模式07-29

            Java單例設計模式04-25

            解析Java的設計模式編程之解釋器模式的運用05-19

            Java的設計模式編程中責任鏈模式的運用的實例講解07-07

            Java的結構型模式07-09

            簡單講解Java的Future編程模式方案03-24

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院