[設計模式練習]橋接模式
將連結的資料庫類別及查詢條件利用橋接模式設計
增加間接層
類別圖
物件檔定義
using System.Collections.Generic;
using System.Text;
namespace DesignModelTest.橋接
{
/* dbcommand : Abstraction
* 查詢方式 : Implementor
* dbcommand包括查詢方式 , 但查詢方式不包括dbcommand
* */
/// <summary>
/// Implementor : 查詢方式
/// </summary>
abstract class QueryWay
{
public abstract void DislapyQueryWay();
}
/// <summary>
/// ConcreteImplementor : 日期
/// </summary>
class Date : QueryWay
{
public override void DislapyQueryWay()
{
Console.WriteLine("使用日期查詢");
}
}
/// <summary>
/// ConcreteImplementor : 性別
/// </summary>
class Sex : QueryWay
{
public override void DislapyQueryWay()
{
Console.WriteLine("使用性別查詢");
}
}
/// <summary>
/// ConcreteImplementor : 姓名
/// </summary>
class NAME : QueryWay
{
public override void DislapyQueryWay()
{
Console.WriteLine("使用姓名查詢");
}
}
/// <summary>
/// Abstraction : 使用dbcommand
/// </summary>
abstract class DbType
{
protected QueryWay queryway;
public void SetDbType(QueryWay queryway)
{
this.queryway = queryway;
}
public abstract void DisplayDbCommand();
}
/// <summary>
/// RefinedAbstraction : MySql
/// </summary>
class MySql : DbType
{
public override void DisplayDbCommand()
{
Console.WriteLine("Mysql資料庫查詢");
queryway.DislapyQueryWay();
}
}
/// <summary>
/// RefinedAbstraction : Access
/// </summary>
class Access : DbType
{
public override void DisplayDbCommand()
{
Console.WriteLine("Access資料庫查詢");
queryway.DislapyQueryWay();
}
}
/// <summary>
/// RefinedAbstraction : Oracle
/// </summary>
class Oracle : DbType
{
public override void DisplayDbCommand()
{
Console.WriteLine("Oracle資料庫查詢");
queryway.DislapyQueryWay();
}
}
}
用戶端程式碼
//使用access資料庫(abstraction)
DesignModelTest.橋接.DbType dbtype = new DesignModelTest.橋接.Access();
//指派implement的方法
dbtype.SetDbType(new DesignModelTest.橋接.Date());
//輸出結果
dbtype.DisplayDbCommand();
dbtype.SetDbType(new DesignModelTest.橋接.Sex());
dbtype.DisplayDbCommand();
Console.Read();
#endregion
輸出結果