Simple Factory,Factory,簡單工廠模式,設計範式
今天和大家介紹另一個常用且簡單的模式
在.net中MSSQL和MYSQL 都是連接資料庫 但只是插在連接使用的類別不一樣
那我們要怎麼封裝到一個類上呢?
這時候可以使用工廠模式
UML圖:
定義一個 介面IDbConcrete 裡面提供 連接資料庫之動作
public interface IDbConcrete
{
void GetDBConcrete();
}
分別定義MSSQL,MYSQL,ORACLE 三個連接資料庫 並實現 IDbConcrete實作 連接方式
public class MSSQL : IDbConcrete
{
public void GetDBConcrete()
{
Console.WriteLine("執行MYSQL");
}
}
public class MySQL:IDbConcrete
{
public void GetDBConcrete()
{
Console.WriteLine("執行MYSQL");
}
}
public class Oracle : IDbConcrete
{
public void GetDBConcrete()
{
Console.WriteLine("執行Oracle");
}
}
最重要工廠實體類 ConnectionFactory
public class ConnectionFactory
{
public static IDbConcrete GetConnection(DBType type) {
IDbConcrete db = null;
switch (type)
{
case DBType.MySQL:
db=new MySQL();
break;
case DBType.MSSQL:
db = new MSSQL();
break;
case DBType.Oracle:
db = new Oracle();
break;
default:
db = new MSSQL();
break;
}
return db;
}
}
我們在外面呼叫就很簡單 給一個參數就會由工廠提供給我們一個相對應的實體
class Program
{
static void Main(string[] args)
{
IDbConcrete dataConner = ConnectionFactory.GetConnection(DBType.MySQL);
dataConner.GetDBConcrete();
Console.ReadKey();
}
}
但簡單工廠有個不足的地方,日後有追加實體須在工廠類中的switch新增 ex:新增DB2連接方式
違反開放封閉原則(OCP)
原始碼:
https://github.com/isdaniel/DesignPattern/tree/master/DesignPattern/SimpleFactory
如果本文對您幫助很大,可街口支付斗內鼓勵石頭^^