[設計模式練習]橋接模式

[設計模式練習]橋接模式

將連結的資料庫類別及查詢條件利用橋接模式設計

增加間接層

類別圖

Bridge

物件檔定義


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

輸出結果

pic4