02_简单工厂模式
简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,属于工厂模式的一种。在简单工厂模式中,通过一个工厂类来负责创建对象实例,而客户端无需直接创建对象,只需要通过工厂类来获取所需的对象。
简单工厂模式包含以下几个角色:
- 工厂类(Factory):负责创建对象实例的类。
- 产品类(Product):工厂类所创建的对象实例的共同接口或父类。
- 具体产品类(Concrete Product):实现产品类接口的具体对象类。
Product:
public interface IFruit { /// <summary> /// 水果的数量 /// </summary> double Amount { get; } /// <summary> /// 种植 /// </summary> /// <param name="amount"></param> void Plant(int amount); /// <summary> /// 生成 /// </summary> /// <param name="days"></param> void Grow(int days); /// <summary> /// 收获 /// </summary> /// <returns></returns> double Harvest(); }
Concrete Product
苹果

public class Apple : IFruit { public double Amount { get; private set; } public void Grow(int days) { Amount *= days * 0.85; } public double Harvest() { return Amount; } public void Plant(int amount) { Amount = amount; } }
香蕉

public class Banana : IFruit { public double Amount { get; private set; } public void Grow(int days) { Amount *= days * 2; } public double Harvest() { return Amount; } public void Plant(int amount) { Amount = amount; } }
橘子

public class Orange : IFruit { public double Amount { get; private set; } public void Grow(int days) { Amount *= days * 1.5; } public double Harvest() { return Amount; } public void Plant(int amount) { Amount = amount; } }
Factory
public class FruitFactory { public static IFruit Create(string name) { switch (name) { case "Apple": return new Apple(); case "Banana": return new Banana(); case "Orange": return new Orange(); default: return null; } }
//通过反射获取对象实例 public static IFruit Create<T>() { return (IFruit)Activator.CreateInstance(typeof(T)); } }
static void Main(string[] args) { var apple = FruitFactory.Create("Apple"); var banana = FruitFactory.Create("Banana"); var orange = FruitFactory.Create("Orange"); apple = FruitFactory.Create<Apple>(); banana = FruitFactory.Create<Banana>(); orange = FruitFactory.Create<Orange>(); apple.Plant(10); apple.Grow(180); Console.WriteLine($"苹果收获:{apple.Harvest()}") ; banana.Plant(10); banana.Grow(180); Console.WriteLine($"香蕉收获:{banana.Harvest()}"); orange.Plant(10); orange.Grow(180); Console.WriteLine($"柑橘收获:{orange.Harvest()}"); Console.ReadKey(); }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)