C#設計模式之抽象工廠(AbstractFactory)

來源:互聯網
上載者:User

1. 為什麼要用抽象工廠?用抽象工廠的好處

這裡我暫時還想不出有什麼好處

我覺得就是利用介面來實現封裝其子類,讓具體的工作交給它的子類去做。所以說這應該不能算抽象工廠的優點,只能算作介面的優點。

 

 

2. 在C#中怎樣用抽象工廠?

好,我們來看一下怎麼來實現

比如說我們要寫一個串連資料庫的組件,既支援sqlserver的,又要支援oledb的,這時我們就可以用AbstractFactory設計模式了。

先定義一個介面:

public interface IDbHelper

 

 

    {      

 

 

        void ExecuteNonQuery();

 

 

       

 

 

        DataSet ExecuteForDataSet(string sql);

 

 

    }

 

 

然後定義兩個類(一個是sqlserver的,一個是oledb的)來繼承IdbHelper這個介面:

internal class SqlDbHelper:IDbHelper

 

 

    {

 

 

public SqlDbHelper()

 

 

        {

 

 

        }

 

 

        public void ExecuteNonQuery()

 

 

        {

 

 

        }

 

 

 

 

        public DataSet ExecuteForDataSet(string sql)

 

 

        {

 

 

            //這裡實現sqlserver的方法

 

 

            return null;

 

 

        }

 

 

    }

 

 

 

 

    internal class OleDbHelper:IDbHelper

 

 

    {

 

 

public OleDbHelper()

 

 

        {

 

 

        }

 

 

        public void ExecuteNonQuery()

 

 

        {

 

 

        }

 

 

 

 

        public DataSet ExecuteForDataSet(string sql)

 

 

        {

 

 

            //這裡實現oledb的方法

 

 

            return null;

 

 

        }

 

 

    }

然後,來定義一個工廠類:

public class DbHelperFactory

 

 

    {

 

 

        public static IDbHelper CreateDbHelper(int DbType)

 

 

        {

 

 

            switch(DbType)

 

 

            {

 

 

                case 1:

 

 

                    return new SqlDbHelper();

 

 

                case 2:

 

 

                    return new OleDbHelper();

 

 

                default:

 

 

                    return null;

 

 

            }

 

 

        }

 

 

    }

 

 

最後我們來調用這個工廠類:

 public class AbstractFactoryTest

 

 

    {

 

 

        public void TestMethod()

 

 

        {

 

 

            IDbHelper sqldb=DbHelperFactory.CreateDbHelper(1);

 

 

            sqldb.ExecuteNonQuery();

 

 

        }

 

 

    }

 

 

這個時候我們就可以很方便的調用資料庫組件了,在調用CreateDbHelper方法時,傳入參數為1,那麼就是調用SqlDbHelper這個類,傳入參數為2,那麼就是調用OleDbHelper這個類。當然傳入的參數你還可以把它變為枚舉型,這樣就更加方便了。

 

 

這樣的寫法也更利於擴充,比如說以後要添加一個OracleDbHelper時,你只需要再添加一個類,改動一個方法(CreateDbHelper)就可以了。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.