之前的那个简单工厂 只有一个工厂啊 如果类型很多不利于扩展 因为类型多 责任重大啊
工厂方法模式,相当于 根据产品做了分类 比如 比亚迪 里面有很多 比亚迪系列的
这样有了个分类,大家看看代码,自己手动敲一敲:
需要什么汽车就要去对应的厂家(后者说是4S店)
工厂方法模式
什么是工厂方法模式
工厂方法模式Factory Method,又称多态性工厂模式。在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。该核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
这种比简单工厂模式的扩展性提升了很大呀;
看下结构:
定义产品接口:
package FactoryModel; //汽车厂 public interface Car { void run(); }
实现产品的类:
package FactoryModel; public class BydCar implements Car { @Override public void run() { System.out.println("比亚迪F3run"); } }
package FactoryModel; public class BydCarE implements Car{ @Override public void run() { System.out.println("比亚迪E6run"); } }
package FactoryModel; public class JiLiCar implements Car { @Override public void run() { System.out.println("吉利帝豪run"); } }
定义工厂接口:
package FactoryModel; //汽车厂 public interface CarFactory { Car CreateCar(String name); }
工厂接口的实现类(细分了):
1、比亚迪工厂(或者4S店)
package FactoryModel; public class BydFactory implements CarFactory { @Override public Car CreateCar(String name) { if (name.equals("比亚迪F3")){ //里面有很多型号的 return new BydCar(); } if (name.equals("比亚迪E6")) { return new BydCarE(); } return new BydCar(); } }
2、吉利工厂(或者4s店)
package FactoryModel; public class JiLiFactory implements CarFactory { @Override public Car CreateCar(String name) { if (name.equals("吉利帝豪")) { return new JiLiCar(); } return new JiLiCar(); } }
客户端;
package FactoryModel; public class Client { public static void main(String[] args) { CarFactory bydFactory = new BydFactory(); Car bydCar = bydFactory.CreateCar("比亚迪F2"); bydCar.run(); Car bydcarE = bydFactory.CreateCar("比亚迪E6"); bydcarE.run(); CarFactory jiliFactory = new JiLiFactory(); Car jiliCar = jiliFactory.CreateCar("吉利帝豪"); jiliCar.run(); } }
运行结果:
工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类实现
优点 客户端不需要在负责对象的创建,从而明确了个各类的职责,如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增强了系统的扩展性
缺点 需要额外的编写代码 增加了工作量