代码改变世界

工厂方法模式

2019-02-26 11:35  剑动情缥缈  阅读(238)  评论(0编辑  收藏  举报

1.基本概念

  • 工厂方法模式,又称工厂模式、多态工厂模式和虚拟构造器模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,将类的实例化延迟到子类工厂
  • 解决的问题:简单工厂违背的开放-封闭原则等
  • UML图
  • 模式组成

  

2.代码实现

package com.chengjie;

interface Product1 {
    void show();
}

interface Factory1 {
    Product1 createProduct();
}

class ProductA1 implements Product1 {
    @Override
    public void show() {
        System.out.println("ProductA1.show() is called!");
    }
}

class ProductB1 implements Product1 {
    @Override
    public void show() {
        System.out.println("ProductB1.show() is called!");
    }
}

class FactoryA implements Factory1 {
    @Override
    public Product1 createProduct() {
        return new ProductA1();
    }
}

class FactoryB implements Factory1 {
    @Override
    public Product1 createProduct() {
        return new ProductB1();
    }
}

public class TestFactoryMethod {
    public static void main(String[] args) {
        FactoryA fa = new FactoryA();
        fa.createProduct().show();

        FactoryB fb = new FactoryB();
        fb.createProduct().show();
    }
}
View Code

3.优点

  • 开放-封闭原则:简单工厂中违背的开放-封闭原则
  • 单一职责原则:一个工厂方法只负责一个产品的创建
  • 不使用静态方法模式,可形成继承结构

4.缺点

  • 增加了工厂类与多个接口

5.应用场景

  • 类不需要知道对象的类时,工厂方法只需要知道工厂即可

6.参考链接

  https://www.jianshu.com/p/d0c444275827