zoukankan      html  css  js  c++  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();
        }
    
    }
    复制代码

    打印结果如下:

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

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

  • 相关阅读:
    一个从MongoDB中导出给定日期范围内数据的shell脚本
    Populate A List Item With Record Group In Oracle Forms Using Populate_List And Create_Group_From_Query Command
    An Example Of Validating Text Item In Oracle Forms Using When-Validate-Item Trigger
    Know How To Use ID_NULL Function To Search An Object In Oracle Forms
    Create XO Checker Game With Oracle Forms
    Using SYSTEM.MOUSE_ITEM In Oracle Forms
    Highlighting Text Item On Entry In Oracle Forms
    How To Tune or Test PLSQL Code Performance in Oracle D2k Forms
    Creating Timer in Oracle D2k / Forms 6i and Displaying a Clock
    Create Timer Example To Show Image Presentation in Oracle Forms
  • 原文地址:https://www.cnblogs.com/eryun/p/7353492.html
Copyright © 2011-2022 走看看