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();
        }
    
    }
    复制代码

    打印结果如下:

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

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

  • 相关阅读:
    HDU3336 Count the string —— KMP next数组
    CodeForces
    51Nod 1627 瞬间移动 —— 组合数学
    51Nod 1158 全是1的最大子矩阵 —— 预处理 + 暴力枚举 or 单调栈
    51Nod 1225 余数之和 —— 分区枚举
    51Nod 1084 矩阵取数问题 V2 —— 最小费用最大流 or 多线程DP
    51Nod 机器人走方格 V3 —— 卡特兰数、Lucas定理
    51Nod XOR key —— 区间最大异或值 可持久化字典树
    HDU4825 Xor Sum —— Trie树
    51Nod 1515 明辨是非 —— 并查集 + 启发式合并
  • 原文地址:https://www.cnblogs.com/xtdxs/p/6603172.html
Copyright © 2011-2022 走看看