简介
工厂模式定义:实例化对象,用工厂方法代替new操作。达到解耦的目的(避免硬编码耦合)。工厂方法模式是类的创建模式,在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。又叫做虚拟构造子(Virtual Constructor)模式或者多态性工厂(Polymorphic Factory)模式。
角色
- 抽象工厂(FactoryCar)角色:担任这个角色的是工厂方法模式的核心,任何在模式中创建对象的工厂类必须实现这个接口。在实际的系统中,这个角色也常常使用抽象类实现。
- 具体工厂(FactoryJeep、FactoryBus)角色:担任这个角色的是实现了抽象工厂接口的具体JAVA类。具体工厂角色含有与业务密切相关的逻辑,并且受到使用者的调用以创建产品类。
- 抽象产品(Car)角色:工厂方法模式所创建的对象的超类,也就是所有产品类的共同父类或共同拥有的接口。在实际的系统中,这个角色也常常使用抽象类实现。
- 具体产品(Jeep、Bus)角色:这个角色实现了抽象(ExportFile)角色所声明的接口,工厂方法模式所创建的每一个对象都是某个具体产品角色的实例。
类图
源码
车
public interface Car { public void produceCar(); }
吉普
public class Jeep implements Car { public void produceCar() { System.out.println("生产吉普"); } }
巴士
public class Bus implements Car { public void produceCar() { System.out.println("生产巴士"); } }
工厂
public interface FactoryCar { public Car createInstance(); }
吉普工厂
public class FactoryJeep implements FactoryCar{ public Car createInstance() { return new Jeep(); } }
巴士工厂
public class FactoryBus implements FactoryCar{ public Car createInstance() { return new Bus(); } }
测试&结果
public static void main(String[] args) { //工程模式 FactoryCar fj = new FactoryJeep(); Car jeep = fj.createInstance(); jeep.produceCar(); FactoryCar fb = new FactoryBus(); Car bus = fb.createInstance(); bus.produceCar(); /* 结果:生产吉普 生产巴士*/ }
JDK运用
Connection conn=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=DB;user=sa;password=123456");
Statement statement=conn.createStatement();
ResultSet rs=statement.executeQuery("select * from User");
Head First 设计模式(中文版)的示例:
码云地址:https://gitee.com/manusas/FactoryDP