學習結構模式是我們很快能像到的是Adapter ,Bridge,等等的設計模式,我們就有疑問這些為什麼總結到結 構型設計模式中,在實際的設計過程中怎樣選擇合適的設計結構型模式。
結構型設計模式是通過對類和對象的組合產生更大的結構來滿足在設計過程中對軟體的安全性,可擴充性,有效性等等的要求的實現。同時,結構型建立模式可以實現在實際啟動並執行環境中,對象可以動態實現之間的組合關係。
下面就具體的說明每一個結構型模式
2.1 Adapter Pattern (適配器模式)
功能
將一個類的介面轉化成需要的另外的一個介面,Adapter 模式將原來不相容的類也能在一起工作。
使用的原因
在當前的開發環境中,有類包含著需要的資訊,但這個類和我們定義的介面不匹配,對於資訊來講兩者資訊是相似的。(這樣提供了轉化的可能)
Adapter Pattern 的實現
對於Adapter Pattern 來講就是
1 設計現在系統中需要的介面
2 設計適配器來實現這個介面(在適配器中還是包含著需要轉換的類)
舉例
我們現在開發一個報表的子系統,我們需要一個時間的類,這個類中包含了對時間的顯示的處理。在現實的報表中日期包含了好多顯示的形式 (二零零五年六月,2005年6月 ,。。。),在dot net 的類庫中包含了 DateTime 這個類,DateTime 類包含了時間的資訊。
和我們需要的介面一樣包含了時間的資訊(資訊的本質上是沒有差別的)。對於我們需要的介面來講 ,我們需要對時間的顯示進行特殊的處理,而對於其他的時間的比較功能還是和DateTime類是一樣的
在這樣的情況下我們就需要Adapter Pattern模式來實現對介面的實現。
代碼實現
/**//// <summary>
/// Client 的摘要說明。
/// </summary>
class Client
{
/**//// <summary>
/// 應用程式的主進入點。
/// </summary>
[STAThread]
static void Main(string[] args)
{
ChineseDateTime chi=new ChineseDateTime(DateTime.Now);
Console.WriteLine(chi.chineseYearDate());
}
}
public enum ChineseNum{零,一,二,三,四,五,六,七,八,九}
public class ChineseDateTime
{
private DateTime _datetime;
public ChineseDateTime(DateTime Param_DateTime)
{
this._datetime =Param_DateTime;
}
/**//// <summary>
/// get the day
/// </summary>
public int Day
{
get
{
return this._datetime.Day;
}
}
/**//// <summary>
/// get chinese date Style such as '二零零五年'
/// </summary>
/// <returns></returns>
public string chineseYearDate()
{
string year=this._datetime.Year.ToString();
string ChineseYear=string.Empty ;
for(int index=0;index<year.Length ;index++)
{
ChineseYear+=((ChineseNum)int.Parse(year.Substring(index,1))).ToString();
}
ChineseYear+="年";
return ChineseYear;
}
}
}
2.2 Bridge Pattern (橋接)