美文网首页Java
设计模式之——工厂方法模式

设计模式之——工厂方法模式

作者: Jerry_1116 | 来源:发表于2019-03-01 23:39 被阅读0次

1 定义

工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。


工厂方法模式通用类图

2 通用代码示例

2.1 产品类

抽象产品类代码:

public abstract class Product {
    /**
     * 产品的共享方法,对所有的继承子类方法生效
     */
    public void sharedMethod() {
    }

    /**
     * 产品的抽象方法,需要各个具体实现类进行实现
     */
    public abstract void method();
}

具体实现类:
具体实现类可以有多个,都继承自抽象产品类。

public class ConcreteProductA extends Product {
    @Override
    public void method() {
        //业务处理逻辑
    }
}
public class ConcreteProductB extends Product {
    @Override
    public void method() {
        //业务处理逻辑
    }
}

2.2 工厂类

抽象工厂类负责定义产品对象的产生方法。
抽象工厂类:

public abstract class CreatorFactory {

    /**
     * 声明生成产品的方法
     *
     * @return 产品实例
     */
    public abstract Product createProduct();
}

产生ConcreteProductA的工厂类ConcreteCreatorFactoryA类:

public class ConcreteCreatorFactoryA extends CreatorFactory {
    @Override
    public Product createProduct() {
        return new ConcreteProductA();
    }
}

产生ConcreteProductB的工厂类ConcreteCreatorFactoryB类:

public class ConcreteCreatorFactoryB extends CreatorFactory {
    @Override
    public Product createProduct() {
        return new ConcreteProductB();
    }
}

2.3 客户端类

public class Client {
    public static void main(String[] args) {
        CreatorFactory factory;
        Product product;
        factory = new ConcreteCreatorFactoryA();
        product = factory.createProduct();
        factory = new ConcreteCreatorFactoryB();
        product = factory.createProduct();
    }
}

3 工厂方法模式的使用场景

在以下几种场景中,可以考虑使用工厂方法模式:

  1. 工厂方法模式是new一个对象的替代方式。
  2. 需要灵活、扩展性强的框架时。
  3. 软件需要用在异构项目中,减少与外围系统的耦合。
  4. 适用于测试驱动开发的框架下。
    总之一句话,工厂方法比较适合横向扩展需求较多的场景

4 工厂方法模式的优缺点

  • 优点
    工厂方法模式中我们把生成产品类的时间延迟,就是通过对应的工厂类来生成对应的产品类,在这里我们就可以实现“开发-封闭”原则,无论加多少产品类,我们都不用修改原来类中的代码,而是通过增加工厂类来实现。

    1. 良好的封装性,代码结构清晰。
      创建一个具体的产品对象,只需要知道对应的工厂类就可以了,而不需要知道具体的创建方法。
    2. 工厂方法模式扩展性非常优秀,符合“开-闭原则”
      在增加产品类的情况下,只要适当地修改具体实现类或者扩展一个工厂类,就可以实现。
    3. 屏蔽产品类
      只要保持抽象类和接口类不变,无论产品如何变化,都不会影响现有实现。
  • 缺点
    如果产品类过多,我们就要生成很多的工厂类。假如我们要实现的产品接口不止一个,也就是有多个产品接口,不同产品接口有对应的产品族。什么是产品族呢?简单的理解就是,不同牌子产的车里面会有跑车类型,家庭类型,商用类型等的车,不同牌子的车的跑车类型的车可以组成一个产品族。对于这种情况我们可以采用抽象工厂模式。

参考

  1. 简单工厂模式&工厂方法模式&抽象工厂模式的区别
  2. 设计模式之禅

相关文章

网友评论

    本文标题:设计模式之——工厂方法模式

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