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

引言:ide

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

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

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

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

 

理解:對象

適配器,就是把原來兩個不能一塊兒使用的東西、模塊、系統,經過中間的一個轉化器,變成兩個東西、模塊、系統能夠鏈接起來一塊兒使用。blog

這個在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();
}

這兩種模式的區別在於,接口的適配是沒有默認實現的,全部的方法都是須要繼承類本身實現的。
而對象模式是,能夠有本身的實現的,這個其實就是抽象類和接口的區別吧。

 

總結:

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

 

應用場景:

一、 系統須要使用現有的類,而此類的接口不符合系統的須要。
二、 想要創建一個能夠重複使用的類,用於與一些彼此之間沒有太大關聯的一些類,包括一些可能在未來引進的類一塊兒工做。這些源類不必定有很複雜的接口。
三、 僅對對象適配器而言,在設計裏,須要改變多個已有子類的接口,若是使用類的適配器模式,就要針對每個子類作一個適配器,而這不太實際。

特別描述:

四、代碼IUser _userObj = new UserAdapter();從耦合度來講這行代碼的不符合要求,由於耦合度過高,因此須要咱們設計時解耦。

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

五、可是這裏的Demo只是說明適配器模式,真真在設計時,如何使用適配器,確定不是Demo中的那樣。

 

代碼下載:

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

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

相關文章
相關標籤/搜索