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

歡迎訪問 生活随笔!

生活随笔

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

asp.net

IO流中的设计模式

發布時間:2025/5/22 asp.net 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IO流中的设计模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、裝飾器模式
    • Decorator裝飾器:
    • 代碼實現
    • 裝飾器特點
    • 裝飾器在IO流中的使用
    • 總結:
  • 適配器模式
    • Adapter適配器
    • 代碼實例
    • 適配器特點
    • 適配器優缺點
    • 適配器在IO中的使用


一、裝飾器模式

Decorator裝飾器:

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

Component:
為統一接口,也是裝飾類和被裝飾類的基本類型。
ConcreteComponent:
為具體實現類,也是被裝飾類,他本身是個具有一些功能的完整的類。
Decorator:
是裝飾類,實現了Component接口的同時還在內部維護了一個ConcreteComponent的實例,并可以通過構造函數初始化。而Decorator本身,通常采用默認實現,他的存在僅僅是一個聲明:我要生產出一些用于裝飾的子類了。而其子類才是賦有具體裝飾效果的裝飾產品類。
ConcreteDecorator:
是具體的裝飾產品類,每一種裝飾產品都具有特定的裝飾效果。可以通過構造器聲明裝飾哪種類型的ConcreteComponent,從而對其進行裝飾。

代碼實現

/*** 是裝飾類和被裝飾類的基礎,統一的接口*/ public interface Component {public void method(); } /*** 被裝飾類 是Component接口的具體實現*/ public class ConctreteComponent implements Component {@Overridepublic void method() {System.out.println("ConctreteComponent ...");} } /*** 裝飾類* 實現了Component接口*/ public abstract class Decorator implements Component {//內存維護了一個Component實例private Component component;//通過構造函數來實例化內存的component屬性public Decorator(Component component) {this.component = component;}@Overridepublic void method() {component.method();} } /*** 具體的裝飾類A*/ public class ConcreteDecoratorA extends Decorator {public ConcreteDecoratorA(Component component) {super(component);}public void methodA() {System.out.println("裝飾器A提供的新的功能");}@Overridepublic void method() {System.out.println("針對該方法添加一層包裝");super.method();System.out.println("A包裝結束");} }

裝飾器特點

它必須持有一個被裝飾的對象(作為成員變量)。
它必須擁有與被裝飾對象相同的接口(多態調用、擴展需要)
它可以給被裝飾對象添加額外的功能。
總結:保持接口,動態增強性能。

裝飾器在IO流中的使用

/*** Inputstream相當于統一的接口,給被裝飾類和裝飾類的基本的類型* FileInputStream相當于原始的被封裝的對象,為具體的實現類,他對inputstream方法有完整的實現*/FileInputStream inputStream = new FileInputStream(path);/*** FilterInputStream是裝飾類,其繼承自InputStream基類* 內部存在一個InputStream實例,需要通過構造函數來實例化內部屬性* /FilterInputStream extends InputStream {protected volatile InputStream in;/*** BufferInputStream就是具體的裝飾類 */BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream); InputStream是被裝飾類和裝飾類的基本類型,這里是通過抽象類的形式提供的,相當于Component接口 FileInputStream是具體的被裝飾類,是繼承自InputStream,提供了完備的InputStream 方法的實現。相當于是concreateComponent類 FilterInputStream是裝飾器類,其繼承InpuStream,內部維護了一個Inpustream實現類,相當于Decorator類 BufferInputstream是具體的裝飾器類,繼承自FilterInputStream裝飾器類,提供了具有特有的緩沖功能的特點

總結:

裝飾器模式就是一個可以非常靈活的動態擴展類功能的設計模式,它采用組合的方式取代繼承,使得各個功能的擴展更加獨立和靈活。

適配器模式

Adapter適配器

適配器定義:將一個類的接口轉換成客戶希望的另外一個接口,Adapter模式使原本由于接口不兼容而不能一起工作的哪些類可以一起工作
適配器模式分兩種:類適配器和對象適配器
? 使用繼承(就是所謂的類適配器模式)
? 使用組合(所謂的對象適配器模式)


適配器所涉及的角色有:
Target(目標接口):所要轉換的所期待的接口
Adaptee(源角色):需要適配的類
Adapter(適配器):將源角色適配成目標接口,一般持有源接口的引用(或者繼承源接口),且實現目標接口。
Client(客戶類):通過目標角色獲取服務

代碼實例

手機充電器適配:
存在一個Typec接口的充電器,期望提供一個USB接口的充電器

/*** 源角色,需要適配的類*/ public class TypeC {public void typec(){System.out.println("TypeC 充電器實現");} } /*** 目標角色* 用戶期望使用use充電器*/ public interface USB {public void use(); } /*** 適配器類* 將源角色適配成目標角色*/ public class Adapter extends TypeC implements USB {@Overridepublic void use() {super.typec();} }

適配器特點

?優點
1、適配器對象實現原有接口
2、適配器對象組合一個實現新接口的對象(這個對象也可以不實現一個接口,只是一個單純的對象)
3、對適配器原有接口方法的調用被委托給新接口的實例的特定方法(重寫舊接口方法來調用新接口功能。)
? 缺點
過多使用適配器會使得系統非常凌亂,明明調用的是A接口,內部卻被適配成了B接口。因此除非必要,不推薦使用適配器,而是直接對系統重構

適配器優缺點

? 優點
有更好的復用性。系統需要使用現有的類,但此類接口不符合系統需要,通過適配器模式讓這些功能得到很好的復用
有更好的擴展性。實現適配器,可以調用自己開發的功能
適用場景
軟件系統結構需要升級或擴展,又不想影響原有系統穩定運行的時候
轉換類之間的差別不是很大的時候
想創建一個可以復用的類,該類可以與其他不相關類或不可預見類協同工作的時候

適配器在IO中的使用

在IO中適配器的使用也比較廣泛
適配器角色就是InputStreamReader,
被適配的角色是InputStream類的實例對象,
目標接口是Reader類。
可以看到,InputStreamReader實現了Reader接口,并且持有了InputStream的引用,這里是通過StreamDecoder類間接持有的,因為從byte到char 要經過編碼。

/******************Reader類(目標類)******************/ public abstract class Reader implements Readable, Closeable { abstract public int read(char cbuf[], int off, int len) throws IOException; abstract public void close() throws IOException; } /******************InputStreamReader類(適配器類)******************/ public class InputStreamReader extends Reader {private final StreamDecoder sd;//持有對被適配對象的引用public InputStreamReader(InputStream in) {super(in);try {//通過StreamDecoder類間接引用被適配的對象sd = StreamDecoder.forInputStreamReader(in, this, (String)null);} catch (UnsupportedEncodingException e) {// The default encoding should always be availablethrow new Error(e);}}//…(省略的代碼)}/******************InputStream類(被適配類)******************/public abstract class InputStream implements Closeable {//代碼省略 }

總結

以上是生活随笔為你收集整理的IO流中的设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日韩 国产 一区 | 久久青青草原 | 国产在线视频一区二区 | 欧美色图在线播放 | 欧美精品福利 | 色版视频 | 亚洲国产精品成人无久久精品 | 午夜精品一区二区三区三上悠亚 | 九九热视频免费观看 | 丝袜av在线播放 | 91精品国产综合久久福利软件 | 国产精品大屁股白浆一区 | 成人h在线 | 超碰97免费在线 | 久久av高潮av| 日韩经典第一页 | 无码人妻一区二区三区免费 | 黄色成年人网站 | 亚洲午夜视频在线观看 | 欧美日韩一区二区三区四区 | 在线观看欧美国产 | 污污网站在线观看视频 | 亚洲综合网在线观看 | 欧美三根一起进三p | 91精品一区二区三区四区 | 免费a级大片 | 精品无码av一区二区三区不卡 | 久久av高潮av| av图片在线观看 | 日本综合视频 | 国产乱码久久久 | 2020狠狠干| 让男按摩师摸好爽 | 久久久av网站 | aa成人| 99这里只有精品 | 欧美日韩影院 | 天堂在线视频免费观看 | 成人欧美一区二区三区 | 在线免费观看麻豆 | 成人欧美精品 | 非洲黑人毛片 | 丝袜美女被c| 午夜影视av | 亚洲视频欧洲视频 | 香蕉视频官网在线观看 | 又色又爽又高潮免费视频国产 | 无码人妻久久一区二区三区蜜桃 | 玖玖精品视频 | 国产高清精品软件丝瓜软件 | 久久狠狠干 | 亚洲国产精品无码久久久 | 极品在线观看 | 少妇被黑人到高潮喷出白浆 | 在线亚洲人成电影网站色www | 日本a在线观看 | 北条麻妃久久 | 精品成在人线av无码免费看 | 日本色婷婷 | 精品国产成人亚洲午夜福利 | 最好看的日本字幕mv视频大全 | 污污网站免费 | 交专区videossex农村 | 黄av网站| 国产人妖一区 | 韩国bj大尺度vip福利网站 | 国产91精 | 婷婷色小说 | 夜夜爽夜夜 | 美女精品久久久 | 综合一区二区三区 | 日韩黄色一级大片 | 全部免费毛片在线播放 | 美女国产免费 | 免费一级毛片麻豆精品 | 99久 | 黄色免费视屏 | 欧美怡红院 | 91爱看| 天天射天天射 | 久久精品tv | 亚洲粉嫩 | 麻豆一级片 | 福利二区视频 | 日韩亚洲视频在线观看 | 国产系列在线 | 开心综合网 | 凹凸国产熟女精品视频 | 欧美性色黄大片手机版 | 素人fc2av清纯18岁 | 亚洲视频免费在线观看 | 午夜视频在线 | 欧美午夜视频在线观看 | 免费69视频 | 欧美国产在线观看 | 久久精品国产一区二区三区 | 亚洲狠狠婷婷综合久久久久图片 | 国产精品一区二区欧美 | 婷婷九月丁香 |