美文网首页
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