• 设计模式二之工厂模式


    一、工厂模式  

      工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。

    优点:

    • 一个调用者想创建一个对象,只要知道其名称就可以了,降低了耦合度。
    • 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。使得代码结构更加清晰。
    • 屏蔽产品的具体实现,调用者只关心产品的接口。

    1.1、简单工厂模式

            实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例,这个比较简单例子就不写了。但是简单工厂模式不符合开闭原则。

    1.2、工厂方法模式

            工厂方法是粒度很小的设计模式,因为模式的表现只是一个抽象的方法。 提前定义用于创建对象的接口,让子类决定实例化具体的某一个类,即在工厂和产品中间增加接口,工厂不再负责产品的创建,由接口针对不同条件返回具体的类实例,由具体类实例去实现。对扩展友好,无需修改原有的代码。但是也新增了好多的文件,从理论上讲,工厂方法模式有优势,从实际上讲,还是使用简单工厂模式占优势,可见没有绝对的好坏。

      交通工具类接口

    package com.duchong.factorymodel;
    
    /**
     * Created by DUCHONG on 2018/3/29.
     */
    public interface Car {
    
         void move();
    }
    

      具体的交通工具实现类

    package com.duchong.factorymodel;
    
    /**
     * @author DUCHONG
     * @since 2018-03-29 14:05
     **/
    public class Bus implements Car{
        @Override
        public void move() {
            System.out.println("Bus move slowly");
        }
    }
    
    package com.duchong.factorymodel;
    
    /**
     * @author DUCHONG
     * @since 2018-03-29 14:06
     **/
    public class Taxi implements Car{
        @Override
        public void move() {
            System.out.println("Taxi move faster");
        }
    }

      交通工具的工厂类接口

    package com.duchong.factorymodel;
    
    /**
     * Created by DUCHONG on 2018/3/29.
     */
    public interface CarFactory {
    
        Car getCar();
    }
    

      具体的交通工具工厂类的实现类

    package com.duchong.factorymodel;
    
    /**
     * @author DUCHONG
     * @since 2018-03-29 14:08
     **/
    public class BusFactory implements CarFactory{
        @Override
        public Car getCar() {
            return new Bus();
        }
    }
    
    package com.duchong.factorymodel;
    
    /**
     * @author DUCHONG
     * @since 2018-03-29 14:09
     **/
    public class TaxiFactory implements CarFactory{
        @Override
        public Car getCar() {
            return new Taxi();
        }
    }
    

      调用者,这里用main方法代替

    package com.duchong.factorymodel;
    
    /**
     * @author DUCHONG
     * @since 2018-03-29 14:09
     **/
    public class Main {
        public static void main(String[] args) {
            CarFactory factory=null;
    
            factory=new BusFactory();
            Car bus=factory.getCar();
            bus.move();
    
            factory=new TaxiFactory();
            Car taxi=factory.getCar();
            taxi.move();
        }
    }
    

      运行结果

  • 相关阅读:
    吴裕雄--天生自然轻量级JAVA EE企业应用开发Struts2Sping4Hibernate整合开发学习笔记:Hibernate_criteria
    吴裕雄--天生自然轻量级JAVA EE企业应用开发Struts2Sping4Hibernate整合开发学习笔记:Hibernate_named_HQL
    吴裕雄--天生自然轻量级JAVA EE企业应用开发Struts2Sping4Hibernate整合开发学习笔记:Hibernate_implicit_join
    HDU
    HDU
    HDU
    HDU
    HDU
    BZOJ
    HDU
  • 原文地址:https://www.cnblogs.com/geekdc/p/8669643.html
Copyright © 2020-2023  润新知