简单工厂模式:
·定义:定义一个工厂类,可以根据不同的方法返回不同类的实例,被创建的实例通常具有共同的父类。
·包含角色:
Factory(工厂):核心部分,实现创建所有产品的内部逻辑,工厂类可被外界直接调用,创建所需对象
Product(抽象类产品):工厂类所创建的所有对象的父类,封装了产品对象的公共方法,所有的具体产品为其子类对象
ConcreteProduct(具体产品):目标产品,所有被创建的对象都是某个具体类的实例。它要实现抽象产品中声明的抽象方法(有关抽象类)。
简单实现:
1、创建产品接口
public interface IProduct //接口 抽象产品类
{
//各种产品功能
void make();
}
2、创建实际产品类
public class Product : IProduct//具体产品
{
//实现接口
public void make()
{
}
}
3、创建工厂类
public class factory//工厂类
{
//静态方法生产产品 参数只要能区分种类即可,是不是字符串无所谓
public static IProduct CreateProduct(string type)
{
IProduct NeedProduct = null;
//匹配生产选择的产品
switch (type)
{
case "...":
NeedProduct = new Product();
break;
}
return NeedProduct;
}
优点:工厂类包含了必要的判断,自动根据传入的参数创建相应的实例,责任相对明确,可通过 相应的配置文件更换和增加新的具体产品类,较为灵活。
缺点:工厂类责任过重,一旦出现问题,整个系统都会出现问题。使用简单工厂模式会增加类的个数,系统复杂度会越来越高,且每次扩展都需要更改工厂类方法。
泛型工厂:
将工厂类改为:
public class factory<T>where T:Product,new()
{
//静态方法生产产品
public static T CreateProduct()
{
T product = new T();
return new T();
}
}
优点;简化了工厂类,省去了大量判断语句。