设计模式之工厂模式
工厂模式
属于创建型模式,提供了一个创建对象的方式
主要解决:主要解决接口选择的问题。
何时使用:我们明确地计划不同条件下创建不同实例时。
如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。
包括:简单工厂模式(普通简单工厂,多方法简单工厂,静态方法简单工厂),工厂模式,抽象工厂模式,
三者的不同:
- 首先,三者的创建对象是不相同的
- 其次,三者的定义变量不同。
- 最后,三者的接口数量不同
总结:
简单工厂模式: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();
}
}