2019/05/19
Creational Design Patterns主要是一些產生物件的作法,不同的pattern要解決不同的問題。
public class DbContext{ public string Server { get; set; } public string ConnectionStr { get; set; } public void Connect() { System.Diagnostics.Trace.WriteLine($"Connect to {this.Server}"); }}public enum DbEnum{ DataMart = 1, History, Online}Static factory (Class Factory Method)
public class StcDbFactory{ public static DbContext Create(DbEnum dbEnum) { switch (dbEnum) { case DbEnum.DataMart: return new DbContext() { Server = "DataMart", ConnectionStr = "DataMart connection string" }; case DbEnum.History: return new DbContext() { Server = "History", ConnectionStr = "History connection string" }; case DbEnum.Online: return new DbContext() { Server = "Online", ConnectionStr = "Online connection string" }; default: throw new Exception("No mapping database settings!"); } } public static DbContext CreateDataMart() { return new DbContext() { Server = "DataMart", ConnectionStr = "DataMart connection string" }; } public static DbContext CreateHistory() { return new DbContext() { Server = "History", ConnectionStr = "History connection string" }; } public static DbContext CreateOnline() { return new DbContext() { Server = "Online", ConnectionStr = "Online connection string" }; }}使用方式
//1. 由參數決定建立哪種連線var dmDbcontext = StcDbFactory.Create(DbEnum.DataMart);dmDbcontext.Connect();//2. 直接呼叫對應的方法var olDbcontext = StcDbFactory.CreateOnline();olDbcontext.Connect();Abstract factory,把Factory分割成多個子類別,而Factory本身就變成一個Abstract class
public abstract class AbsDbFactory{ public abstract DbContext Create();}public class DataMartDbFactory : AbsDbFactory{ public override DbContext Create() { return new DbContext() { Server = "DataMart", ConnectionStr = "DataMart connection string" }; }}public class HistoryDbFactory : AbsDbFactory{ public override DbContext Create() { return new DbContext() { Server = "History", ConnectionStr = "History connection string" }; }}public class OnlineDbFactory : AbsDbFactory{ public override DbContext Create() { return new DbContext() { Server = "Online", ConnectionStr = "Online connection string" }; }}使用方式
var dmFactory = new DataMartDbFactory();var dmDbcontext = dmFactory.Create();dmDbcontext.Connect();