设计模式之工厂模式
工厂模式
属于创建型模式,提供了一个创建对象的方式
主要解决:主要解决接口选择的问题。
何时使用:我们明确地计划不同条件下创建不同实例时。
如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。
包括:简单工厂模式(普通简单工厂,多方法简单工厂,静态方法简单工厂),工厂模式,抽象工厂模式,
三者的不同:
- 首先,三者的创建对象是不相同的
- 其次,三者的定义变量不同。
- 最后,三者的接口数量不同
总结:
简单工厂模式:1个抽象产品类,1个具体工厂类.,1个产品
工厂方法模式:1个抽象产品类,1个抽象工厂类,1个产品
抽象工厂模式:1个抽象产品类,1个抽象工厂类,多个产品
普通简单工厂
public interface Class1
{
void GetResult(string num1, string num2);
//void GetSUm();
}
class OrdinarySimpleFactory
{
static void Main(string[] args)
{
OperationFactory fa = new OperationFactory();
Console.WriteLine("开始");
//先输入第一个数
Console.WriteLine("请输入运营商:");
string num1 = Console.ReadLine();
Console.WriteLine($"输入的运营商是:{num1}");
//int number1 = CheckNum(num1);
//先输入第二个数
Console.WriteLine("请输入手机号:");
string num2 = Console.ReadLine();
Console.WriteLine($"输入的手机号是:{num2}");
Console.WriteLine("请输入发送信息:");
string num3 = Console.ReadLine();
Console.WriteLine($"输入的发送信息是:{num3}");
Class1 qq = fa.GetResult(num1);
qq.GetResult(num2, num3);
Console.ReadLine();
}
}
public class OperationFactory
{
public Class1 GetResult(string num1)
{
Class1 res = null;
switch (num1)
{
case "移动":
res=new AA();
break;
case "联通":
res = new BB();
break;
case "电信":
res = new DD();
break;
default:
return null;
}
return res;
}
}
public class AA : Class1
{
public void GetResult(string num1, string num2)
{
Console.WriteLine($"手机号:{num1},信息{num2}");
}
}
public class BB : Class1
{
public void GetResult(string num1, string num2)
{
Console.WriteLine($"手机号:{num1},信息{num2}");
}
}
public class DD : Class1
{
public void GetResult(string num1, string num2)
{
Console.WriteLine($"手机号:{num1},信息{num2}");
}
}
多方法简单工厂
public class ManyMethodSimpleFactory
{
public static void Main(string[] args)
{
ManyMethodOperationFactory fa = new ManyMethodOperationFactory();
string num2 = "12121";
string num3 = "进口粮食局考了多少分";
ManyMethodOperationFactory.GetResult().GetResult(num2, num3);
fa.GetResult1().GetResult(num2, num3);
//qq;
Console.ReadLine();
}
}
public class ManyMethodOperationFactory
{
//静态方法简单工厂
public Class1 GetResult()
{
return new HPMouse();
}
public Class1 GetResult1()
{
return new LenoveMouse();
}
}
public class HPMouse : Class1
{
public void GetResult(string num1, string num2)
{
Console.WriteLine($"方法一手机号:{num1},信息{num2}");
}
}
public class LenoveMouse : Class1
{
public void GetResult(string num1, string num2)
{
Console.WriteLine($"方法二手机号:{num1},信息{num2}");
}
}
静态方法简单工厂
public class ManyMethodSimpleFactory
{
public static void Main(string[] args)
{
ManyMethodOperationFactory fa = new ManyMethodOperationFactory();
string num2 = "12121";
string num3 = "进口粮食局考了多少分";
ManyMethodOperationFactory.GetResult().GetResult(num2, num3);
fa.GetResult1().GetResult(num2, num3);
//qq;
Console.ReadLine();
}
}
public class ManyMethodOperationFactory
{
//静态方法简单工厂
public static Class1 GetResult()
{
return new HPMouse();
}
public Class1 GetResult1()
{
return new LenoveMouse();
}
}
public class HPMouse : Class1
{
public void GetResult(string num1, string num2)
{
Console.WriteLine($"方法一手机号:{num1},信息{num2}");
}
}
public class LenoveMouse : Class1
{
public void GetResult(string num1, string num2)
{
Console.WriteLine($"方法二手机号:{num1},信息{num2}");
}
}
工厂模式
public class 工厂模式
{
public static void Main(string[] args)
{
DellComplexFactory fa = new DellComplexFactory();
fa.CreateMouse().Print();
HpComplexFactory hp = new HpComplexFactory();
hp.CreateMouse().Print();
//qq;
Console.ReadLine();
}
}
//鼠标工厂
public abstract class ComplexFactory
{
public abstract Class2 CreateMouse();
}
public class DellComplexFactory : ComplexFactory
{
public override Class2 CreateMouse()
{
return new DellMouse();
}
//
}
public class HpComplexFactory : ComplexFactory
{
public override Class2 CreateMouse()
{
return new HpMouse();
}
///
}
//其他厂家的鼠标
public class XXXXX : ComplexFactory
{
public override Class2 CreateMouse()
{
throw new NotImplementedException();
}
}
public abstract class Class2
{
public abstract void Print();
//public void Prin();
//void GetSUm();
}
public class DellMouse : Class2
{
public override void Print()
{
Console.WriteLine("生产了一个Dell鼠标!");
}
}
public class HpMouse : Class2
{
public override void Print()
{
Console.WriteLine("生产了一个Hp鼠标!");
}
}
public class XXxMouse : Class2
{
public override void Print()
{
Console.WriteLine("生产了一个XXx鼠标!");
}
}
抽象工厂模式:工厂模式看作是抽象工厂的一个特例。
public abstract class Keybo
{
public abstract void Print();
}
public class DellKeybo : Keybo
{
public override void Print()
{
Console.WriteLine("生产了一个Dell鼠标!");
}
}
public abstract class ComplexFactory
{
public abstract Class2 CreateMouse();
public abstract Keybo CreateKeybo();
}
public class DellComplexFactory : ComplexFactory
{
public override Class2 CreateMouse()
{
return new DellMouse();
}
public override Keybo CreateKeybo()
{
return new DellKeybo();
}
//
}
public class 抽象工厂模式
{
public static void Main(string[] args)
{
//戴尔
DellComplexFactory fa = new DellComplexFactory();
fa.CreateMouse().Print();//鼠标
fa.CreateKeybo().Print();//键盘
HpComplexFactory hp = new HpComplexFactory();
hp.CreateMouse().Print();
//qq;
Console.ReadLine();
}
}
分类:
设计模式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!