zoukankan      html  css  js  c++  java
  • java 工厂方法模式简单实例

    工厂方法模式:也叫工厂模式,属于类创建型模式,工厂父类(接口)负责定义产品对象的公共接口,而子类工厂则负责创建具体的产品对象。

    目的:是为了把产品的实例化操作延迟到子类工厂中完成,通过工厂子类来决定究竟应该实例化哪一个产品具体对象。

    工厂方法模式包含四个部分:

    1.抽象产品:产品对象同一的基类,或者是同一的接口。

    2.具体的产品:各个不同的实例对象类

    3.抽象工厂:所有的子类工厂类的基类,或是同一的接口

    4.具体的工厂子类:负责每个不同的产品对象的实际创建

    具体的实例代码:

    1.抽象的产品类:定义car  交通工具类下:

    package factory.simple;
    
    /**
     * 抽象产品角色 交通工具接口
     * 
     * @author lilin
     * 
     */
    public interface Car {
    
        /**
         * 上班函数
         */
        void gotowork();
    
    }

    2.定义实际的产品类,总共定义两个,bike 和bus 分别表示不同的交通工具类

    package factory.simple;
    
    /**
     * 具体产品角色,自行车
     * 
     * @author lilin
     * 
     */
    public class Bike implements Car {
        @Override
        public void gotowork() {
            System.out.println("骑自行车去上班!");
        }
    
    }
    package factory.simple;
    
    /**
     * @author lilin
     * 
     */
    public class Bus implements Car {
    
        @Override
        public void gotowork() {
            System.out.println("坐公交车去上班!");
        }
    
    }

    3.抽象的工厂接口定义如下:、

    /**
     * 
     */
    package factory.factory;
    
    import factory.simple.Car;
    
    /**
     * @author lilin
     * 
     */
    public interface ICarFactory {
    
        /**
         * 获取交通工具
         * 
         * @return
         */
        Car getCar();
    
    }

    4.具体的工厂子类,分别为每个具体的产品类创建不同的工厂子类:

    /**
     * 
     */
    package factory.factory;
    
    import factory.simple.Bike;
    import factory.simple.Car;
    
    /**
     * @author lilin
     * 
     */
    public class BikeFactory implements ICarFactory {
    
        @Override
        public Car getCar() {
            return new Bike();
        }
    
    }
    /**
     * 
     */
    package factory.factory;
    
    import factory.simple.Bus;
    import factory.simple.Car;
    
    /**
     * @author lilin
     * 
     */
    public class BusFactory implements ICarFactory {
    
        @Override
        public Car getCar() {
            return new Bus();
        }
    
    }

    最后,使用简单的测试类,来验证下 不同的工厂能够产生不同的产品对象:测试类如下:

    /**
     * 
     */
    package factory.factory;
    
    import org.testng.annotations.Test;
    
    import factory.simple.Car;
    
    /**
     * @author lilin
     * 
     */
    public class TestFactory {
    
        @Test
        public void test() {
            ICarFactory factory = null;
            // bike
            factory = new BikeFactory();
            Car bike = factory.getCar();
            bike.gotowork();
    
            // bus
            factory = new BusFactory();
            Car bus = factory.getCar();
            bus.gotowork();
        }
    
    }

    打印结果如下:

    骑自行车去上班!
    坐公交车去上班!

    工厂模式,可以理解为:有了很多个工厂方法,自己需要哪一个产品,就调用当前产品的工厂方法,获取相应的具体实例。

  • 相关阅读:
    ORACLE DBA的职责
    oracle开发常用LOV
    Oracle Patch 版本的查询
    指定二次分配为主要分配
    系统日期格式引起的错误:出生日期不能为将来日期
    分享一个帮助你检测网站颜色对比度的在线web工具 checkmycolours
    最常用的CURL命令大全
    超棒的javascript移动触摸设备开发类库 QUOjs
    分享一个超炫HTML5开发的jQuery进度条插件 percentageloader
    纯CSS实现的3D简洁按钮设计
  • 原文地址:https://www.cnblogs.com/lilin0719/p/5309397.html
Copyright © 2011-2022 走看看