999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種基于泛型的裝飾模式實現方法

2018-01-01 00:18:39陳輝
科學與財富 2017年30期

摘 要: 本文闡述了設計模式的定義及基本要素,分析了裝飾模式的結構、動機與目的,對比基于繼承與虛函數的實現,提出了一種基于泛型的實現方法及代碼。最后討論了該實現方法的優缺點。

關鍵詞: 設計模式; 泛型; 靜多態; 動多態; 裝飾模式; 模板

1 引言

設計模式是對于某一類的軟件設計問題的可重用的解決方案。[1]在軟件開發中,其主要作用為:重用設計、共用詞匯、方便交流、易于重構。一個模式有四個基本要素:1)模式名稱,用于描述模式的問題、解決方案和效果;2)問題 用于解釋設計問題和問題存在的前因后果;3)解決方案 描述設計的組成部分、相互關系及其各種的職責和協作方式;4)效果 描述模式應用的效果和使用模式應權衡的問題。[2]設計模式主要分為創建型、結構型、行為型,裝飾模式是結構型模式之一,其意圖是“動態地給一個對象添加一些額外的職能”。

在面向對象程序設計中,封裝變化最主要的技術是多態。多態是同一實體同時具有多種形式,即同一操作作用于不同的對象,產生不同的執行結果。多態分為動多態、靜多態。動多態是通過繼承和虛函數來實現的,在運行期間,虛函數調用不同子類型的虛成員函數以實現不同的功能。靜多態是通過泛型中模板實現的,在編譯期間,接口綁定不同的功能代碼。

當前,設計模式的實現技術是使用動多態,即繼承與虛函數(接口與實現)。其主要的問題是,接口必須在公共基類中預先設定,動多態的綁定是入侵性的或者插入式的。針對這一問題,本文以裝飾模式為例,使用靜多態給出非入侵性或非插入式的實現。

2 裝飾模式

裝飾模式是對象的結構型模式,其動機是:給對象添加額外的功能,同時避免給類添加額外的功能。為了避免繼承的子類獲得其不需要的功能,可使用裝飾模式。

裝飾模式結構圖如圖1,[3]其參與者分別為:Component定義一個對象接口,可以給這些對象動態地添加職責;ConcreteComponent定義一個對象,可以給這個對象添加職責;Decorater維持一個指向Component的指針,并定義一個與Component接口一致的接口。ConcreteDecorator向組件添加職責。對象協作中,Decorator將請求轉發給它的Component對象,并有可能在轉發請求前后執行一些附加的動作。

3 泛型與模板

泛型是現代程序設計語言的一種特性。泛型是一種特殊的類型,其將指定類型的工作延遲到客戶端代碼聲明并實例化類或方法的時候,泛型將類型參數化以達到代碼復用的目的,從而提高軟件開發工作效率。

不同的語言支持的泛型的特性不同。.NET泛型是具有占位符(類型參數)的類、結構、接口和方法,這些占位符是類、結構、接口和方法所存儲或使用的一個或多個類型的占位符。泛型集合類可以將類型參數用作其所存儲的對象的類型的占位符;類型參數作為其字段的類型及其方法的參數類型出現。泛型方法可以將其類型參數用作其返回值的類型或者其某個形參的類型。Java 泛型的參數只代表類,不能代表個別對象。由于 Java 泛型的類型參數之實際類型在編譯時會被消除,所以無法在運行時得知其類型參數的類型。Java?編譯器在編譯泛型時會自動加入類型轉換的編碼,因此其運行速度不會因為使用泛型而加快。[4] 在C++ 中,泛型即模板,其無法對泛型的類型參數進行約束,在編譯時,每個使用的封閉泛型類型都有獨立的編碼產生,編譯器確保其類型安全性。[5]C++模板有兩種類型,函數模板與類模板。下面以C++模板為例,給出裝飾模式的實現方法。

4 泛型實現裝飾模式

基于泛型的靜多態為實現設計模式提供了新方法。靜多態的實現類型在編譯期中確定,從而可以避免使用指針,其具備更好的類型安全性,更高的效率。下面是其實現結構圖。

Class ConcreteDecoratorA {

Public:

Void operation() const;

Void AddedBehaviorA() const;

}

Class ConcreteDecoratorB{

Public:

Void operation() const;

Void AddedBehaviorB() const;

}

Template

Class RefinedComponent {

Private:

T const decorator;

Public:

Void Operation() ;

}

Template

Void RefinedComponent::Operation()

{

decorator.operation();

}

在基于泛型的裝飾模式實現中,由于基類變成泛型,實現了非入侵性或非插入式的綁定。

同時,基于靜多態的實現代碼數量也減小。

5優點與缺點

基于泛型的裝飾模式具有以下優點:1)無需通過公共基類來表達接口的共性,更便于實現內建類型的集合;2)不通過指針進行間接調用,生成的代碼效率較高;3)對于提供部分接口的具體類型也可以調用;4)靜多態在編譯期對所有的綁定操作進行檢查,具有更好的類型安全性。其缺點是:1)不能優雅地處理異類集合;2)實現代碼雖小,但可執行生成代碼較大;具體實現中,可根據其優缺點進行選擇。

6 結束語

綜上所述,裝飾模式可通過繼承與虛函數實現,也可通過泛型和模板實現。不同封裝變化的技術可以實現相同的功能,本文給出了裝飾模式基于泛型的實現方法及代碼,其他模式也可通過泛型實現。

參考文獻

[1] Gamma Erich.設計模式可復用面向對象軟件的基礎[M].北京:北京機械工業出版, 2000.

[2] 拉爾曼.UML 和模式應用:面向對象分析與設計導論[M].北京:北京機械工業出版社, 2001.

[3] Shalloway Alan.設計模式解析[M].北京:中國電力出版社, 2003.

[4] Wu T C.Java 面向對象程序設計[M].第 2 版.北京:清華大學出版社, 2002.

[5] (美)MatthewH.Austern著,侯捷譯.泛型編程與STL[M]. 中國電力出版社, 2003

作者簡介:陳輝(1973-),男,漢族,湖北武漢人,浙江商業職業技術學院,講師,研究方向為計算機網絡和軟件理論。

主站蜘蛛池模板: 国产欧美综合在线观看第七页| 欧美亚洲日韩中文| 亚洲日本中文字幕乱码中文 | av一区二区三区高清久久| 久久精品娱乐亚洲领先| 98精品全国免费观看视频| 欧美有码在线| V一区无码内射国产| 日韩欧美高清视频| 日本精品一在线观看视频| 免费国产好深啊好涨好硬视频| 99国产在线视频| 成人一级免费视频| 视频国产精品丝袜第一页| 亚洲无码A视频在线| 狠狠色丁香婷婷| 天天综合色天天综合网| 自拍偷拍欧美| 一区二区三区精品视频在线观看| 久久精品亚洲专区| 婷婷丁香色| 亚洲午夜久久久精品电影院| 四虎影视国产精品| 精品一区二区三区无码视频无码| 日韩精品一区二区三区视频免费看| 日韩美毛片| 国产精品男人的天堂| 狠狠色丁婷婷综合久久| 久久精品丝袜| 国产精品三区四区| 久草网视频在线| 亚洲成a人片77777在线播放| 国产爽歪歪免费视频在线观看| 成年人视频一区二区| 国产超碰一区二区三区| 超碰91免费人妻| 亚洲欧美一级一级a| 国产成人精品男人的天堂下载| 精品人妻无码区在线视频| 又粗又硬又大又爽免费视频播放| 亚洲欧美人成电影在线观看| 国产极品美女在线| 国产免费观看av大片的网站| 老司机久久99久久精品播放 | 亚洲视频无码| 91丨九色丨首页在线播放| 无码久看视频| 久久人搡人人玩人妻精品| 成人无码一区二区三区视频在线观看 | 人妻91无码色偷偷色噜噜噜| 国产高清国内精品福利| 狼友视频国产精品首页| 欧美午夜网| 精品国产黑色丝袜高跟鞋 | 五月天久久综合| 国产成人亚洲精品色欲AV| 在线a视频免费观看| 特级毛片8级毛片免费观看| 久久精品午夜视频| 亚洲色图欧美一区| 青青操视频在线| 婷婷六月激情综合一区| 国产亚卅精品无码| 中文字幕佐山爱一区二区免费| 国产欧美日韩资源在线观看| 亚洲无码37.| 九九热视频精品在线| 国产亚洲精品在天天在线麻豆| 制服丝袜在线视频香蕉| 日本不卡免费高清视频| 亚洲欧美日韩另类在线一| 99er精品视频| 四虎成人在线视频| 国产91蝌蚪窝| 国产在线观看一区二区三区| 无码乱人伦一区二区亚洲一| 午夜福利亚洲精品| 亚洲精品视频免费| 精品国产Av电影无码久久久| 欧美日韩第二页| 久久91精品牛牛| 国产午夜精品一区二区三|