国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

.Net設計模式_適配器模式

2019-11-17 03:24:16
字體:
來源:轉載
供稿:網友

.Net設計模式_適配器模式

引言:

有一次我看到一個朋友拿出一個三角型的東西,好奇的上去一看你,我勒個去,傳說中的萬能插口轉接器(插口適配器)。

一面是插入口,集合了我認識的所有插口的形狀,也有國內沒看見過的;另一個是跟插座接觸的,也是集合了我見過的所有樣式,當然也有我沒見過的。

問了下,這個三角型的東西,全世界通用(前提是跟他的另一個變壓器一起使用)。這個東西老貴了,不算變壓器,也要兩張毛爺爺多。

而這就是現實生活中的適配器模式。

理解:

適配器,就是把原來兩個不能一起使用的東西、模塊、系統,通過中間的一個轉化器,變成兩個東西、模塊、系統可以連接起來一起使用。

這個在IT項目中是經常碰到的問題,比如我們需要在一個已有的系統平臺中,加載我們開發的模塊系統,那么授權系統就需要用別人的,

這個時候我們需要做一個適配器,把平臺中的授權系統封裝后,給我們系統使用。

適配器模式,分兩種:接口適配器和對象適配器。

代碼示例:

接口適配器

// 第三方系統的操作public class OperateUserInfo{    public String OperateUser()    {        return "用戶的姓名";    }}
// 獲取用戶信息接口public interface IUser{    String GetUserName();}// 實現接口public class UserAdapter : IUser{    OperateUserInfo _opObj = new OperateUserInfo();    public string GetUserName()    {        return _opObj.OperateUser();    }}
static void Main(string[] args){    // 調用    IUser _userObj = new UserAdapter();    Console.WriteLine(_userObj.GetUserName());    Console.ReadLine();}

對象適配器

public class User{    public virtual String GetUserName()    {        return String.Empty;    }}public class UserAdapter2 : User{    OperateUserInfo _opObj = new OperateUserInfo();    public override String GetUserName()    {        return _opObj.OperateUser();    }}
static void Main(string[] args){    // 調用    IUser _userObj = new UserAdapter();    Console.WriteLine(_userObj.GetUserName());    Console.WriteLine("----");    //     User _userObj2 = new UserAdapter2();    Console.WriteLine(_userObj2.GetUserName());    Console.ReadLine();}

這兩種模式的區別在于,接口的適配是沒有默認實現的,所有的方法都是需要繼承類自己實現的。而對象模式是,可以有自己的實現的,這個其實就是抽象類和接口的區別吧。

總結:

1、對象適配用處是,可以使Adaptee不必實現不需要的方法,具體就是其表現形式就是父類實現缺省方法,而子類只需實現自己獨特的方法。2、適配器類可以是抽象類。3、帶參數的適配器模式。使用這種辦法,適配器類可以根據參數返還一個合適的實例給客戶端。

應用場景:

1、系統需要使用現有的類,而此類的接口不符合系統的需要。2、想要建立一個可以重復使用的類,用于與一些彼此之間沒有太大關聯的一些類,包括一些可能在將來引進的類一起工作。這些源類不一定有很復雜的接口。3、僅對對象適配器而言,在設計里,需要改變多個已有子類的接口,如果使用類的適配器模式,就要針對每一個子類做一個適配器,而這不太實際。

特別描述:

4、代碼IUser _userObj = new UserAdapter();從耦合度來說這行代碼的不符合要求,因為耦合度太高,所以需要我們設計時解耦。

解耦的方式是,使用反射和泛型的感念,來動態聲明實例。

5、但是這里的Demo只是說明適配器模式,真真在設計時,如何使用適配器,肯定不是Demo中的那樣。

代碼下載:

百度云盤 http://pan.baidu.com/s/1bn6B7Z5

CSDN http://download.csdn.net/detail/hater22/6850527


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 迭部县| 穆棱市| 霍州市| 绥中县| 竹北市| 阆中市| 涟水县| 普安县| 东源县| 始兴县| 襄城县| 博白县| 吉水县| 翼城县| 佛冈县| 密山市| 许昌市| 友谊县| 嵊泗县| 齐齐哈尔市| 蕉岭县| 德兴市| 民县| 合肥市| 洞口县| 株洲县| 张掖市| 青州市| 酉阳| 青河县| 湖南省| 张家界市| 陆良县| 思茅市| 碌曲县| 工布江达县| 中超| 崇左市| 肥乡县| 红安县| 武安市|