java 中設計模式(裝飾設計模式)的實例詳解
應用場景:
在不對原有對象類進行修改的基礎上,給一個或多個已有的類對象提供增強額外的功能.
我覺得可以從字面理解,裝飾,裝飾房子。房子可以看成原有的類。等于你把一個已經建好的房子按照自己的想法再裝飾一遍。繼承也可以實現這樣的功能,但是繼承有它的缺點,繼承只是單一繼承。裝飾設計模式可以取多個不同的類的不同功能。
具體步驟:
◎第1步:通過構造傳參把需要加強的類傳過來。(你要裝修房子,肯定的先有房子吧。這個很好理解)
◎第2步:把具體需要增強的功能寫了
具體例子及代碼
寫一個MyBufferedReader類,使它能夠對字符流(如FileReader、InputStreamReader和PipedReader等)進行功能增強:
(1) 提供帶緩沖的myRead()方法,對原有的read()方法進行增速;
(2)提供一個能夠每次讀取一行字符的myReadLine()方法。
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
|
import java.io.FileReader; import java.io.IOException; /** * * 版本2: 增強FileReader類,使它具有如下功能: * (1) 提供帶緩沖的myRead()方法,對原有的read()方法進行增速; (2)提供一個能夠每次讀取一行字符的myReadLine()方法。 */ public class MyBufferedReader { private char [] cbuf= new char [ 1024 ]; //緩存 private int pos= 0 ; //當前讀取的位置 private int count= 0 ; //記錄緩存中當前的字符總數 //封裝一個FileReader對象,幫助我們實現從文件中讀取一批數據 private FileReader r = null ; public MyBufferedReader(FileReader r) { super (); this .r = r; } /** * 從緩存中讀取一個字符數據返回 * @throws IOException * @return所讀取的字符,如果到達文件末尾則返回-1 */ public int myRead() throws IOException{ //從文件中把數據讀取到緩存buf[]中 if (count<= 0 ){ //System.out.println("**********"); count = r.read(cbuf); if (count==- 1 ){ return - 1 ; } pos= 0 ; } char ch = cbuf[pos]; pos++; count--; return ch; } //回車字符: \r 13 //換行字符: \n 10 public String myReadLine() throws IOException{ StringBuilder sb= new StringBuilder(); int ch= 0 ; //有回車換行符部分 while ( (ch=myRead())!=- 1 ){ if (ch== '\r' ){ continue ; } if (ch== '\n' ){ return sb.toString(); } sb.append(( char )ch); } if (sb.length()!= 0 ){ //最后一行(沒有回車換行符) return sb.toString(); } return null ; //最后或空文件 } public void close() throws IOException{ r.close(); } } |
如有疑問請留言或者到本站社區交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
原文鏈接:http://blog.csdn.net/weixin_37720904/article/details/60757545