參考了下網上的工廠模式實現,總的來講例子仍是OK得,可是示例太單一了,所以我作了下優化的改良實現。less
namespace DP { public interface ICreditCard { string GetCardType(); int GetCreditLimit(); int GetAnnualCharge(); } //Concrete Product 1 public class MoneyBackCreditCard : ICreditCard { public string GetCardType() => "MoneyBack"; public int GetCreditLimit() => 15000; public int GetAnnualCharge() => 500; } //Concrete Product 2 public class TitaniumCreditCard : ICreditCard { public string GetCardType() => "Titanium"; public int GetCreditLimit() => 25000; public int GetAnnualCharge() => 1500; } //Concrete Product 3 public class PlatinumCreditCard : ICreditCard { public string GetCardType() => "Platinum"; public int GetCreditLimit() => 35000; public int GetAnnualCharge() => 2000; } public abstract class CreditCardFactory { protected abstract ICreditCard MakeProduct(); public ICreditCard CreateCreditCard() => MakeProduct(); } public class MoneyBackFactory : CreditCardFactory { protected override ICreditCard MakeProduct() => new MoneyBackCreditCard(); } public class PlatinumFactory : CreditCardFactory { protected override ICreditCard MakeProduct() => new PlatinumCreditCard(); } public class TitaniumFactory : CreditCardFactory { protected override ICreditCard MakeProduct() => new TitaniumCreditCard(); } }
客戶端調用:ide
ICreditCard CreditCardInstance = new PlatinumFactory().CreateCreditCard(); if (CreditCardInstance != null) { Console.WriteLine("CardType : " + CreditCardInstance.GetCardType()); Console.WriteLine("CreditLimit : " + CreditCardInstance.GetCreditLimit()); Console.WriteLine("AnnualCharge :" + CreditCardInstance.GetAnnualCharge()); } else { Console.Write("Invalid Card Type"); } Console.WriteLine("--------------"); CreditCardInstance = new MoneyBackFactory().CreateCreditCard(); if (CreditCardInstance != null) { Console.WriteLine("CardType : " + CreditCardInstance.GetCardType()); Console.WriteLine("CreditLimit : " + CreditCardInstance.GetCreditLimit()); Console.WriteLine("AnnualCharge :" + CreditCardInstance.GetAnnualCharge()); } else { Console.Write("Invalid Card Type"); } Console.Read();
參考資料:Factory Method Design Pattern in C#
相比較來說,此示例更貼近實際的業務開發及邏輯,有助於理解工廠模式在業務開發中的應用。優化