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

  • 相关阅读:
    两种三维点云密度聚类方法的研究与对比
    C++ string和char char*的转换
    七大排序算法总结
    map下标操作和insert区别
    c++ map 使用自定义结构做关键字
    BagFromImage安装与使用
    安装ipython notebook
    c++基本知识
    Python爬虫第一集
    91. Decode Ways
  • 原文地址:https://www.cnblogs.com/manusas/p/7489485.html
Copyright © 2011-2022 走看看