c# 设计模式 之:工厂模式之---工厂模式
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>
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步