简单工厂模式(Simple Factory Pattern)
模式定义
简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于创建型模式。在简单工厂模式中,可以根据传入静态方法不同的参数返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
UML 类图
- Factory 工厂角色 负责实现创建所有实例的内部逻辑(一般为静态类包含静态方法)
- Product 抽象产品角色 所有具体产品类的超类
- ConcreteProduct 具体产品 需要创建的类
代码结构组成
public class SampleFactoryApp
{
public void Run()
{
Product p = Factory.CreateProduct("A");
p.Display();
}
}
public static class Factory
{
public static Product CreateProduct(string type)
{
Product product = null;
if (type == "A")
{
product = new ConcreteProductA();
}
else if (type == "B")
{
product = new ConcreteProductB();
}
return product;
}
}
public abstract class Product
{
public abstract void Display();
}
public class ConcreteProductA : Product
{
public override void Display()
{
Console.WriteLine("Concrete Product A");
}
}
public class ConcreteProductB:Product
{
public override void Display()
{
Console.WriteLine("Concrete Product A");
}
}
情景案例
一个软件系统可以提供多个外观不同的按钮(如圆形按钮、矩形按钮、菱形按钮等), 这些按钮都源自同一个按钮基类,不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈现不同的外观,如果我们希望在使用这些按钮时,不需要知道这些具体按钮类的名字,只需要知道表示该按钮类的一个参数,并提供一个调用的方法,把该参数传入方法即可返回一个相应的按钮对象。
public class SampleFactoryApp
{
public void Run()
{
Button btn = ButtonFactory.CreateButton("A");
btn.Display();
}
}
public static class ButtonFactory
{
public static Button CreateButton(string type)
{
Button button = null;
if (type == "C")
{
button = new CircleButton();
}
else if (type == "R")
{
button = new RectangleButton();
}
return button;
}
}
public abstract class Button
{
public abstract void Display();
}
public class CircleButton : Button
{
public override void Display()
{
Console.WriteLine("This is Circle Button");
}
}
public class RectangleButton : Button
{
public override void Display()
{
Console.WriteLine("This is Rectangle Button");
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)