工厂模式Factory

简介

工厂模式定义:实例化对象,用工厂方法代替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

posted @ 2017-09-07 14:18  曼联  阅读(204)  评论(0编辑  收藏  举报