首页 > 程序开发 > 软件开发 > 其他 >

设计模式(2)工厂方法模式

2017-02-02

设计模式(2)工厂方法模式:简单工厂模式的缺点:简单厂模式的最大缺点 —— 不完全满足 OCP。OCP [开闭原则],其核心思想是:一个类对扩展开方,对修改关闭。

设计模式(2)工厂方法模式:简单工厂模式的缺点:简单厂模式的最大缺点 —— 不完全满足 OCP。OCP [开闭原则],其核心思想是:一个类对扩展开方,对修改关闭。说通俗点就是,如果再添加一个新的产品类,不需要修改原来的工厂类就可以正常运行。很明显,简单工厂模式是不满足的,若想保证整个的正常运行必须修改工厂类。

工厂方法模式

工厂方法模式与简单工厂模式的最大不同在于,简单工厂模式只有一个(对于一个项目或者一个独立模块而言)工厂类,而工厂方法模式有一组实现了相同接口(工厂接口)的工厂类。

工厂方法模式的组成

抽象工厂角色

这是工厂方法模式的核心,它与应用程序无关,是具体工厂类必须实现的接口或继承的抽象类。

具体工厂角色

等同于简单工厂模式的。

抽象产品角色

它是具体产品继承的父类或者是实现的接口。

具体产品角色

等同于简单工厂模式的。

工厂方法模式图示

这里写图片描述

举例说明

案例说明

这里仍然使用简单工厂模式中的例子,具体内容可以去看一下上一篇。

代码

package 工厂方法;

public interface Factory {
  球员 factory();
}

package 工厂方法;

public class 篮球Factory implements Factory{
  @Override
  public 球员 factory() {
      return new 篮球球员();
  }
}

package 工厂方法;

public class 足球Factory implements Factory{
  @Override
  public 球员 factory() {
      return new 足球球员();
  }
}

package 工厂方法;

public interface 球员 {
  void 跑();
  void 跳();
}

package 工厂方法;

public class 篮球球员 implements 球员{
  @Override
  public void 跑() {
      System.out.println("篮球球员,跑跑跑!");
  }

  @Override
  public void 跳() {
      System.out.println("篮球球员,跳跳跳!");
  }
}

package 工厂方法;

public class 足球球员 implements 球员 {
  @Override
  public void 跑() {
      System.out.println("足球球员,跑跑跑!");
  }

  @Override
  public void 跳() {
      System.out.println("足球球员,跳跳跳!");
  }
}

说明:很明显,这里与简单工厂模式的不同在于这里添加了一个工厂接口。而且对于该接口有相应几个,每个对应不同产品类的具体工厂类。

好处:假如现在添加乒乓球球员,在工厂方法模式下,只需要添加两个类即可。一个是乒乓球球员类,另一个是乒乓球Factory类【具体代码如下】。而在简单工厂模式下,就需要修改原来的工厂类了,这就不能满足 OCP 原则了。

代码
package 工厂方法;

public class 乒乓球球员 implements 球员{
    @Override
    public void 跑() {
        System.out.println("乒乓球球员,跑跑跑!");
    }

    @Override
    public void 跳() {
        System.out.println("乒乓球球员,跳跳跳!");
    }
}

package 工厂方法;

public class 乒乓球Factory implements Factory{
    @Override
    public 球员 factory() {
        return new 乒乓球球员();
    }
}

总结(简单工厂模式与工厂方法模式比较)

客户端编程难度

工厂方法模式在工厂类结构中引入了接口,从而能满足 OCP 原则。但是在客户端编码中需要对工厂类进行实例化。而简单工厂模式的工厂类是个静态类,在客户端无需实例化,这无疑是个吸引人的优点。

维护角度

显然工厂方法模式较难维护,需要更改多个工厂类。

综述:虽然工厂方法模式更“先进一些”,但总的来说简单工厂模式更好用、更方便些。当然,这只是个人见解。

相关文章
最新文章
热点推荐