设计模式 - 简单工厂

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类图
    - [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PPUeCZLv-1583550814700)(media/15702455874557/15729602130922.jpg)]

  • 由类图可知,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();// 联想电脑
    }
}
  • 简单工厂的类图
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RoV0wgzc-1583550814701)(media/15702455874557/15729606099963.jpg)]

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

源码地址

  • 设计模式的其他源码地址都在这里哦! 源码地址
发布了59 篇原创文章 · 获赞 30 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_33249725/article/details/104711423