一、什么是简单工厂
提供创建对象的接口
简单工厂并不是GOF23个设计模式中的一种,但它亦有使用价值。
简单来说就是一个类型的许多子类,可以通过同一个工厂创建方法按需创建。
UML图
二、适用场景
当隔绝具体实现,想将实例的创建集中管理和控制,让创建者不用关心实例怎么创建的。
三、优缺点
优点
帮助封装。客户端可以更好的面向接口编程。
解耦。客户端不需要知道实现类。
缺点
需要理解参数的意义,增加复杂度。
不方便扩展子类。一旦添加新产品就不得不修改工厂逻辑。
四、大话中的例子
计算机运算类作为父类,继承它的为加法类、减法类、乘法类、除法类等,简单工厂负责创建这些子类,根据传递过来的参数case分支判断类型。
五、我的例子
using System;
namespace SimpleFactory
{
class Program
{
static void Main(string[] args)
{
UchihaFamily sasuke = UchihaFactory.CreatePerson(UchihaPerson.Sasuke);//用简单工厂创建sasuke
sasuke.UseSkill();//使用技能
UchihaFamily itachi = UchihaFactory.CreatePerson(UchihaPerson.Itachi);//用简单工厂创建itachi
itachi.UseSkill();//使用技能
Console.ReadKey();
}
}
public abstract class UchihaFamily//抽象父类
{
public string name;
public UchihaFamily(string name)
{
this.name = name;
}
public abstract void UseSkill();//共有的方法使用技能
}
class Sasuke : UchihaFamily
{
public Sasuke(string name) : base(name)
{
}
public override void UseSkill()
{
Console.WriteLine( name+":千鸟");
}
}
class Itachi : UchihaFamily
{
public Itachi(string name) : base(name)
{
}
public override void UseSkill()
{
Console.WriteLine(name + ":豪火球之术");
}
}
public class UchihaFactory
{
public static UchihaFamily CreatePerson(UchihaPerson person)
{
UchihaFamily uchiha = null;
switch (person)//以枚举来switch
{
case UchihaPerson.Sasuke:
uchiha = new Sasuke("佐助");
break;
case UchihaPerson.Itachi:
uchiha = new Itachi("鼬");
break;
}
return uchiha;
}
}
public enum UchihaPerson//家族成员枚举
{
Sasuke,
Itachi,
}
}
运行结果
PS:要不要符合可以无限次创建的条件,感觉不需要,做加法的,拿同一个加法实例 放进去两个值就好了。不需要再创建一个新的加法实例。