c# 設計模式 之:工廠模式之---工廠模式
阿新 • • 發佈:2019-02-17
gas exec load common pre bubuko 技術分享 ron deb
1、uml類圖:
實現和依賴關系:
實現:
SportFactory、JeepFactory、HatchbackFactory 實現 IFactory 接口
SportCar、JeepCar、HatchbackCar 實現 ICar 接口
依賴:
IFactory 依賴 ICar
SportFactory 依賴 SportCar
JeepFactory 依賴 JeepCar
HatchbackFactory 依賴 HatchbackCar
Client依賴 IFactory 和 ICar
2、代碼實現:
抽象工廠代碼:
namespace CNBlogs.DesignPattern.Common {public interface IFactory { ICar CreateCar(); } }
抽象產品代碼:
namespace CNBlogs.DesignPattern.Common { public interface ICar { void GetCar(); } }
具體工廠代碼:
namespace CNBlogs.DesignPattern.Common { /// <summary> /// 具體工廠類: 用於創建跑車類 /// </summary>public class SportFactory : IFactory { public ICar CreateCar() { return new SportCar(); } } /// <summary> /// 具體工廠類: 用於創建越野車類 /// </summary> public class JeepFactory : IFactory { public ICar CreateCar() {return new JeepCar(); } } /// <summary> /// 具體工廠類: 用於創建兩廂車類 /// </summary> public class HatchbackFactory : IFactory { public ICar CreateCar() { return new HatchbackCar(); } } }
具體產品代碼:
namespace CNBlogs.DesignPattern.Common { /// <summary> /// 具體產品類: 跑車 /// </summary> public class SportCar : ICar { public void GetCar() { Console.WriteLine("場務把跑車交給範·迪塞爾"); } } /// <summary> /// 具體產品類: 越野車 /// </summary> public class JeepCar : ICar { public void GetCar() { Console.WriteLine("場務把越野車交給範·迪塞爾"); } } /// <summary> /// 具體產品類: 兩箱車 /// </summary> public class HatchbackCar : ICar { public void GetCar() { Console.WriteLine("場務把兩箱車交給範·迪塞爾"); } } }
客戶端代碼:
static void Main(string[] args) { // 工廠類的類名寫在配置文件中可以方便以後修改 string factoryType = ConfigurationManager.AppSettings["FactoryType"]; // 利用.NET提供的反射可以根據類名來創建它的實例,非常方便 var currentAssembly = System.Reflection.Assembly.GetExecutingAssembly(); IFactory factory = Assembly.LoadFrom(currentAssembly.CodeBase).CreateInstance(factoryType) as IFactory; ICar car = factory.CreateCar(); car.GetCar(); Console.ReadKey(); }
App.config:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="FactoryType" value="CAFactory.HatchbackFactory"/> </appSettings> </configuration>
c# 設計模式 之:工廠模式之---工廠模式