在C#中应用工厂模式
工厂方法模式来自于创建模式的分类,创建模式是最好的处置创建对象的方式,工厂方法提供了一个简单的
决策,该决策得出了这样一个类,该类能够返回一个抽象基类的几个子类的对象,这里抽象基类以来与提供的
信息.
"为每一个创建的对象定义一个接口,但是让子类决定由哪个类去初始化,工厂方法让一个类遵从子类的指令去初始
化." --"设计模式" Gamma et al., Addison-Wesley, ISBN:0-201-63361-2"
非软件实例
喷射模型展示了这种模式, 朔料玩具厂处理熟料模型粉末,并且喷射朔料到设计好造型的模子里, 这个玩具类被
模子决定了,
一个工厂模型是一个返回几个可能的类之一的一个实例,这几个可能的类依赖于提供给它们的数据,一般来讲,
所有的类都应该有一个通用的基类和通用的方法,但是方法的实现可能不同.
下面的 UML 表示了工厂方法模式,在这个例子中,我们没有直接创建类Derived1 和Derived2 ,而是使用
工厂类的 getObject() 方法,根据传递的参数去返回一个合适的实例.这样的方法一般叫做工厂方法.工厂
方法可以是静态的也可以是非静态的.

C#中实现工厂方法:
//Creational Pattern: The Factory Method
//In Factory method pattern,
//A Factory class contains a factory method is used for creating the object.
//This factory method can be either static or non-static.

class Factory

{
public Base GetObject(int type)

{
Base base1 = null;
switch (type)

{
case 1:
base1 = new Derived1();
break;
case 2:
base1 = new Derived2();
break;
}
return base1;
}
}
interface Base

{
void DoIt();
}
class Derived1 : Base

{
public void DoIt()

{
Console.WriteLine("Derived 1 method");
}
}
class Derived2 : Base

{
public void DoIt()

{
Console.WriteLine("Derived 2 method");
}
}
//--------Client class----------
//Client class needn't know about instance creation.
//The creation of Product is
//deferred to the Factory class
class MyClient

{
public static void Main()

{
Factory factory = new Factory();//Decides which object must create.
Base obj = factory.GetObject(2);
obj.DoIt();
}
}

这就是工厂方法的基本规则, 我们创建了一个抽象,这个抽象决定了哪几个可能的类被返回, 并且返回一个.之后
我们就能够调用类实例的方法,甚至不需要实际上在使用被继承类是哪一个,对象的建立发生在工厂类内的一个
单独的地方.
记住工厂类可以包含很多个工厂方法,甚至这些工厂方法能够是静态或者非静态.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构