目的

工厂方法的目的在于 不必关注于 对象实例化 初始化过程,这样会导致耦合性很高,将这些细节交给工厂负责,只需要调用一个接口就可以得到想要的对象即可,可以解耦。

简单工厂

1 简单工厂方法还可以根据传入的参数 返回不同的 子类对象 融入了多态

  1. public class SimpleFactory{
  2. private int screenWidth;
  3. private Random random;
  4. ...;
  5. public Enemy create(String Type){
  6. int x = random.nextInt(screenWidth);
  7. Enemy enemy = null;
  8. switch(type){
  9. case "AirPlane":
  10. enemy = new AirPlane(x,0);
  11. break;
  12. case "tank":
  13. enemy = new Tank(x,0);
  14. break;
  15. }
  16. return enemy;
  17. }
  18. }

2 简单工厂一定要保持简单,否则就不要用简单工厂,简单工厂的扩展性较差,随着逻辑的复杂,工厂类也得反复修改,缺乏灵活性
3 简单工厂需要传入的参数确定返回类型,还是有一定的耦合性
image.png

工厂方法

1 对于复杂的生产需求,将简单工厂进行拆分,构建起抽象化 多态性的生产模式
2 需要定义一个 抽象的 工厂接口

  1. public interface EnemyFactory(){
  2. Enemy create(...);
  3. }

3 然后分别建立 飞机工厂 和 坦克工厂 将不同的实现相分离
4 当有新的 Enemy类型的时候 只需要实现Factory 构造新的工厂类即可
image.png
5 工厂方法模式不但能将客户端与敌人的实例化过程彻底解耦,抽象化、多态化后的工厂还能让我们更自由灵活地制造出独特而多样的产品。其实工厂不必万能,方便面工厂不必生产汽车,手机工厂也不必生产牛仔裤,否则就会通而不精,妄想兼备所有产品线的工厂并不是好的工厂