zoukankan      html  css  js  c++  java
  • 工厂模式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

  • 相关阅读:
    软件测试人员的年终绩效考核怎么应对
    收藏
    顶踩组件 前后两版
    订阅组件
    hdu 1963 Investment 完全背包
    hdu 4939 Stupid Tower Defense 动态规划
    hdu 4405 Aeroplane chess 动态规划
    cf 414B Mashmokh and ACM 动态规划
    BUPT 202 Chocolate Machine 动态规划
    hdu 3853 LOOPS 动态规划
  • 原文地址:https://www.cnblogs.com/manusas/p/7489485.html
Copyright © 2011-2022 走看看