简单工厂模式
简单工厂模式:参数化的静态方法,为用户提供实例的创建。
public static ClassName MethodName(参数){}
简单工厂模式的几种情况:
- 对象只有一种,这种情况下方法没必要携带参数。
- 对象有多个的时候,且是同对象类型,可以加入抽象对象,好处是可以让用户不去关心具体的对象。
- 对象有多个,但是对象类型是不同的,可以采用其他模式或者多个工厂模式方法来实现(一般后者不去考虑)
- 实际应用中,对象、工厂对象,都是可以根据实际情况合并(模式变形)。
简单工厂介绍:
- 如果对象创建的时候需要用户指引,那么简单工厂模式是不合适的,如要适用会使方法参数过于复杂因此简单的工厂模式,不去关心对象的创建,而是去关心对象的使用。
- 大多数情况下用户还是必须要知道产品的具体细节,没有减少对细节的依赖(特殊情况,有抽象对象的情况下,在某些应用中可以减少对具体产品的细节依赖)
- 采用静态方法实现类的创建,好处是减少工厂类的创建,缺点是失去了工厂类的继承扩展的优点。
- 简单工厂模式的好处是实现了责任分离,对用户来讲同时也隐藏了构建对象的细节,实现比较简单。
- 增加对象的时候,工厂类需要修改,违背了面向对象的开放封闭原则。
- 只合适对象类比较少的情况下,如果对象类太多,会使静态工厂方法过于庞大。
有一种比较简单的办法,就是采用反射或者泛型类规避静态方法过多而使得工厂类庞大。
工厂模式优缺点
优点
- 符合开放封闭原则,因为增加新的产品不需要修改原来已有的工厂类,只需要增加相应的工厂即可。
- 将使用和创建的责任分开。
- 符合设计的先抽象后具体的顺序。
缺点
- 如果产品类太多会导致增加很多的类,会使系统显得很不简洁。
- 如果将选择逻辑交给用户,则在一定程度上增加了用户对细节的依赖。
- 与简单工厂模式相比,增加了工厂本身的创建开销。
- 用户需要创建工厂类本身.(通过一定的方法可以将工厂类的创建委托给抽象类去完成.见例子。
/*
* by:jxb 2017.4.2
*/
namespace 设计模式
{
/// <summary>对象工厂</summary>
abstract class ObjecFactory
{
/// <summary>创建工厂,委托给产品对象</summary>
public static ObjectProduct CreateFactory<T>() where T : ObjecFactory, new()
{
T objecFactory = new T();
return objecFactory.CreateObject();
}
/// <summary>创建产品对象</summary>
public abstract ObjectProduct CreateObject();
}
/// <summary>对象产品类</summary>
abstract class ObjectProduct
{
public abstract double getPrice();
}
/// <summary>创建的工厂类</summary>
class ClassFactory : ObjecFactory
{
public override ObjectProduct CreateObject()
{
return new ClassProduct(5000);
}
}
/// <summary>创建的对象产品类</summary>
class ClassProduct : ObjectProduct
{
private double _price;
public ClassProduct(double p)
{
this._price = p;
}
public override double getPrice()
{
return this._price;
}
}
}
unity pak包代码:百度网盘下载 密码:6s0y