欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

设计模式 - 简单工厂

程序员文章站 2022-06-13 13:09:20
...

01 简单工厂

  • 定义: 由一个工厂对象决定创建出哪一种产品类的实例。
  • 类型:创建型,但不属于GOF23种设计模式中的一个。
  • 后续的工厂方法,抽象工厂都是由简单工厂来演变
  • 不依赖对应的实现类

应用场景

  • 工厂类负责创建的对象比较少
  • 客户端只知道传入工厂类的参数对于如何创建对象具体逻辑不关心。
  • 优点:只需要传入一个正确的参数,就可以获取你所需要的对象,无需知道其创建的细节。
  • 缺点:工程类职责相对过重,如果添加新的产品需要修改工厂类的判断逻辑,违背开闭原则。

代码案例

  • 场景: 生产不同的电脑-- 苹果电脑 联想电脑等
  • 电脑抽象类/接口
public interface Computer {
    /**
     * 生产电脑
     */
    void produce();
}
  • 苹果电脑的生产方式
public class AppleComputer implements Computer{

    public void produce() {
        System.out.println("苹果电脑");
    }
}
  • 联想电脑的生产方式
public class LenovoComputer implements Computer{

    public void produce() {
        System.out.println("联想电脑");
    }
}
  • 通过工厂进行生产电脑
public class ComputerFactory {
    
    public Computer getComputer(String name){
        if("apple".equalsIgnoreCase(name)){
            return new AppleComputer();
        } else if("lenovo".equalsIgnoreCase(name)){
            return new LenovoComputer();
        }else {
            return null;
        }
    }
}
  • 传统的创建方式测试
public class SimplefactoryTest {
    public static void main(String[] args) {
        //原始的获取对象
        Computer computer = new AppleComputer();
        computer.produce();  //苹果电脑
        Computer computer1 = new LenovoComputer();
        computer1.produce(); // 联想电脑
    }
}
  • 传统的创建对象的UML类图
    设计模式 - 简单工厂

  • 由类图可知,Test类(获取方)必须要依赖具体的生产电脑的实例,才能获取到对应的电脑。

  • 采用简单工厂进行调用

public class SimplefactoryTest {
    public static void main(String[] args) {
        //用简单工厂的方式创建对象
        ComputerFactory computerFactory = new ComputerFactory();
        Computer computer = computerFactory.getComputer("apple");
        computer.produce(); //苹果电脑
        Computer computer1 = computerFactory.getComputer("lenovo");
        computer1.produce();// 联想电脑
    }
}
  • 简单工厂的类图
    设计模式 - 简单工厂

  • 由类图可知,Test(获取方)不需要直接依赖具体的创建电脑的实例,只需要依赖工厂即可,就可以获取到对应的电脑。

源码地址

  • 设计模式的其他源码地址都在这里哦! 源码地址