日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

黑马程序员:java基础之装饰设计模式

發布時間:2025/4/16 asp.net 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 黑马程序员:java基础之装饰设计模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、什么是裝飾設計模式 當想要對已有的對象進行功能增強時,可以定義類,將已有對象傳入,基于已有的功能,并提供加強功能,那么自定義的類成為裝飾類。 裝飾類通常會通過構造方法,傳遞進來一個需要裝飾的對象,然后基于這個對象,提供更強大的方法。 下面是裝飾設計模式的一個例子,自己寫的MyBufferedReader,并提供了myReadLine方法,IO包中類BufferedReader采用原理也是類似的。
/* 裝飾設計模式:MyBufferedReader */ importjava.io.*; classMyBufferedReader { privateFileReaderfr; MyBufferedReader(FileReaderfr) { this.fr=fr; } publicStringmyReadLine()throwsIOException { StringBuildersb=newStringBuilder(); intch; while((ch=fr.read())!=-1) { if(ch=='\r') continue; elseif(ch=='\n') returnsb.toString(); else sb.append((char)ch); } if(sb.length()!=0) returnsb.toString(); returnnull; } publicvoidmyClose()throwsIOException { fr.close(); } } classMyBufferedReaderDemo { publicstaticvoidmain(String[]args)throwsIOException { FileReaderfr=newFileReader("test.txt"); MyBufferedReaderbr=newMyBufferedReader(fr); Stringline=null; while((line=br.myReadLine())!=null) { System.out.println(line); } br.myClose(); } }
 二、裝飾和繼承的區別 裝飾設計模式比繼承要靈活,避免了繼承體系的臃腫,而且降低了類與類之間的關系。 裝飾類因為增強已有對象,具備的功能與已有對象是相同的,只不過提供了更強的功能。所以裝飾類和被裝飾類通常 是屬于同一個體系的。 如下所示:
MyReaderMyReader |--MyTextReader|--MyTextReader |--MyBufferedTextReader|--MyMediaReader |--MyMediaReader|--MyBufferedReader |--MyBufferedMediaReader
如果為了改進一些功能而繼承,就可能導致整個繼承樹過于臃腫,同時要考慮事物之間是否是父類和子類的關系。   在IO包中,還有一個LineNumberReader,繼承了BufferedReader,復用了其中功能(readLine),同時是FileReader的裝飾類。如果想要獲取所讀文件中的行數,可以用這個裝飾類,其中主要提供了了setLineNumber(),getLineNumber()方法。? ?

最新內容請見作者的GitHub頁:http://qaseven.github.io/ ? ?

總結

以上是生活随笔為你收集整理的黑马程序员:java基础之装饰设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。