Java

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

2019-03-01  本文已影响0人  Jerry_1116

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. 设计模式之禅
上一篇下一篇

猜你喜欢

热点阅读