Method Factory Pattern
工厂方法模式
工厂模式总共有三种
简单工厂模式
工厂方法模式
抽象工厂模式
我们先不说怎么分他们,我们先说问题!
还拿水果工厂来说,以前科技不发达,苹果就是苹果,橘子就是橘子,现在不行了,苹果的种类变多了,又是红富士,又是蓝富士的,反正不管叫啥,苹果下面有一堆各式各样的苹果了,如果我们还使用简单工厂模式的话,我们需要写一大堆if...else...判断,这样一个工厂处理的事情就太多了,不是我们希望的!
解决方法
开分厂是不错的选择,水果工厂是总部,开了俩家分工厂,一个是苹果工厂,一个是橘子工厂,分别负责生产各式各样的苹果和橘子,这样就界限分明多了。用户想要红富士,就是苹果工厂要呗!水果工厂就省心了。
package com.pattern.methodfactory; /** * 水果工厂是总部,下面可以开若干个分厂 */ public interface FruitFactory { public Fruit createFruit(String name); }
package com.pattern.methodfactory; /** * 水果接口 */ public interface Fruit { public void sayName(); }
package com.pattern.methodfactory; /** * 苹果工厂,负责生产各种苹果 */ public class AppleFactory implements FruitFactory{ @Override public Fruit createFruit(String name) { if(name==null){ return null; }else if(name.equalsIgnoreCase("redApple")){ return new RedApple(); }else if(name.equalsIgnoreCase("blueApple")){ return new BlueApple(); } return null; } }
package com.pattern.methodfactory; //红苹果 public class RedApple implements Fruit { @Override public void sayName() { System.out.println("RedApple..."); } }
package com.pattern.methodfactory; //蓝苹果 public class BlueApple implements Fruit { @Override public void sayName() { System.out.println("BlueApple..."); } }
package com.pattern.methodfactory; public class Test { public static void main(String[] args) { RedApple redApple=(RedApple) new AppleFactory().createFruit("redApple"); BlueApple blueApple=(BlueApple) new AppleFactory().createFruit("blueApple"); redApple.sayName();//RedApple... blueApple.sayName();//BlueApple... } }
到底方法工厂与简单工厂怎么区分呢,咱们可以简单地这样理解:
方法工厂中的工厂有多个,也就是说他们实现了总工厂,通过分厂获取对象只能通过构造方法即工厂的实例来创建我们需要的产品,这就是工厂方法模式。