工厂模式

简单的说,工厂模式替代了new Class( )的过程,将不同类型对象的创建封装了起来。

优点:

  • 对象缓存
    回收不再使用的对象,重复利用

  • 封装
    有些对象的创建逻辑比较复杂,而调用者不需要知道。
    符合迪米特原则。

  • 解耦
    工厂返回的对象类型可以是抽象类或接口,避免了调用者直接与具体类发生耦合。
    符合依赖倒置原则,模块间的依赖通过抽象发生。

举例:
游戏中,角色会使用多把武器,角色只需要通过武器的ID来获取武器对象即可,不需要自己实现具体的细节。

此时可以创建一个WeaponFactory,为角色创建需要的武器。

public class WeaponFactory
{
  public IWeapon CreateWeapon(int id)
  {
    // 通过id在武器配置文件中找到武器对应的类名

    // 看对象池中有没有可利用的武器对象

    // 没有,则使用反射创建武器对象

    // 返回武器 

  }
}

调用者

IWeapon currentWeapon = weaponFactory.CreateWeapon(1001);

这里看出,调用者只依赖了抽象,即武器对象实现的接口IWeapon,并没有依赖具体的武器类,符合了依赖倒置原则,达到了解耦的目的。

衍生

  • 简单工厂
    单例工厂,有时工厂只需要有一个实例。

  • 多工厂
    不同产品的创建区别较大时,可以使用多个子类工厂进行不同产品的创建,可以避免所有逻辑都集中在一个工厂内。

abstract class HumanFactory
{
  abstract IHuman CreateHuman( );
}

class AsiaHumanFactory : HumanFactory
{
  override IHuman CreateHuman()
  {
  }
}

你可能感兴趣的:(工厂模式)