简单工厂模式的实现分为一下几个步骤(这里以工厂创建交通工具为例):
- 定义一个交通工具的总称(接口)
- 让实现类(具体的交通工具)实现这个接口
- 定义一个工厂(创建交通工具)
- 创造者调用工厂方法
下图是简单的类图可以帮助理解:
1、定义一个交通工具的总称(接口)
package com.dongl.factorymethod; /** * 定义一个交通工具的总称 */ public interface Vehicle { //交通工具可以行驶 void go(); }
2、让实现类(具体的交通工具)实现这个接口
小汽车:
package com.dongl.factorymethod; /** * 小汽车实现交通工具接口 */ public class Car implements Vehicle { @Override public void go() { System.out.println("car go wuwuwuwuw-------------"); } }
公交车:
package com.dongl.factorymethod; /** * 公交车实现交通工具接口 */ public class Bus implements Vehicle { @Override public void go() { System.out.println("bus biubiubiu -------"); } }
飞机:
package com.dongl.factorymethod; /** * 飞机实现交通工具接口 */ public class Plane implements Vehicle { @Override public void go() { System.out.println("plane flying shushua--------------"); } }
2、定义一个工厂(创建交通工具)
package com.dongl.factorymethod; /** * 交通工具工厂 * 通过 Class.forName(clazz.getName()).newInstance() 返回一个具体的实体类 */ public class VehicleFactory { public static Vehicle createVehicle(Class clazz){ Vehicle moveable = null; try { //定义一个类型的交通工具 moveable = (Vehicle)Class.forName(clazz.getName()).newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { System.out.println("定义错误!"); } catch (ClassNotFoundException e) { System.out.println("指定的交通工具不存在---------"); } return moveable; } }
4、创造者调用工厂方法
package com.dongl.factorymethod; public class Creator { public static void main(String[] args) { //造小汽车 Vehicle moveable = VehicleFactory.createVehicle(Car.class); moveable.go(); //造飞机 Vehicle moveable1 = VehicleFactory.createVehicle(Plane.class); moveable1.go(); //造公交车 Vehicle moveable2 = VehicleFactory.createVehicle(Bus.class); moveable2.go(); } }