美文网首页
JAVA设计模式【创建型模式】之【FACTORY METHOD】

JAVA设计模式【创建型模式】之【FACTORY METHOD】

作者: Terry | 来源:发表于2018-03-16 14:39 被阅读20次

    前言

    今天来介绍创建型模式之工厂方法(Factory Method)。

    其他创建型模式:

    1. 意图

    定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。

    2. 适用性

    • 当一个类不知道它所必须创建的对象的类的时候。
    • 当一个类希望由它的子类来指定它所创建的对象的时候。
    • 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望哪一个帮助子类是代理者这一信息局部化的时候。

    3. 参与者

    • Product ——定义工厂方法所创建的对象的接口。
    • ConcreteProduct ——实现Product接口。
    • Creator
      ——声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。
      ——可以调用工厂方法以创建一个Product对象。
    • ConcreteCreator ——重定义工厂方法以返回一个ConcreteProduct实例。

    4. 效果

    优点:
    1). 为子类提供挂钩(hook)用工厂方法在一个雷的内部创建对象通常比直接创建对象更灵活。
    2).连接平行的类层次。
    3). 允许对操作和表示的精华 Singleton类可以有子类,而且用这个扩展类的实例配置一个应用是很容易的。

    5. 实例

    我们还是以汽车为Product来进行举例:


    image.png

    抽象产品类和具体产品类:

    • ICar.java
    • AudiCar.java
    • BmwCar.java
    public interface ICar {
        void run();
    }
    
    public class AudiCar implements ICar {
        @Override
        public void run() {
            System.out.println("驾驶奥迪汽车");
        }
    }
    
    public class BmwCar implements ICar {
        @Override
        public void run() {
            System.out.println("驾驶宝马汽车");
        }
    }
    

    抽象工厂类和具体工厂类

    • ICarFactory.java
    • AudiCarFactory.java
    • BmwCarFactory.java
    public interface ICarFactory {
        ICar getCar();
    }
    
    public class AudiCarFactory implements ICarFactory {
        @Override
        public ICar getCar() {
            return new AudiCar();
        }
    }
    
    public class BmwCarFactory implements ICarFactory {
        @Override
        public ICar getCar() {
            return new BmwCar();
        }
    }
    

    运行一下实例:

    ICarFactory iAudiCarFactory= new AudiCarFactory();
    iAudiCarFactory.getCar().run();
    
    ICarFactory iBmwCarFactory= new BmwCarFactory();
    iBmwCarFactory.getCar().run();
    

    得到运行结果如下图所示:


    image.png

    6. 总结

    • 工厂方法模式是有一个抽象的父类定义公共接口,子类负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成。
    • 工厂方法在一个类的内部创建对象通常比直接创建对象更灵活。
    • 工厂方法通常在Template Methods中被调用。

    相关文章

      网友评论

          本文标题:JAVA设计模式【创建型模式】之【FACTORY METHOD】

          本文链接:https://www.haomeiwen.com/subject/nkdmfftx.html