设计模式之工厂方法模式

工厂方法模式(Factory Method)

定义

定义一个创建对象的接口(Abstract Factory),但由子类(Concrete Factory)决定要实例化的类是哪一个。

使用场景

首先当然是在你需要new一个类的对象的时候,此时各种状况出现啦:

  1. 你不想直接new这个类的对象,怕以后这个类改变的时候你需要回来改代码,而此时依赖这个类的地方已经到处都是了。
  2. 这个类的对象构建过程非常复杂,你不愿意将这么复杂的构建过程一遍又一遍的写在需要用到此对象的地方。
  3. 这个类的对象在构建过程中依赖了很多其他的类,而你无法在调用的地方提供。

主要角色

  1. 抽象产品 Abstract Product
  2. 具体产品 Concrete Product
  3. 抽象工厂 Abstract Factory
  4. 具体工厂 Concrete Factory

类图

示例代码

java 复制代码
@Data
public abstract class Computer {
    protected String brand;
    protected String operationSystem;

}
java 复制代码
public class Computer4Mac extends Computer {
}
java 复制代码
public class Computer4Mi extends Computer {
}
java 复制代码
public interface ComputerFactory {
    Computer makeComputer();
}
java 复制代码
public class ComputerFactory4Mac implements ComputerFactory {
    @Override
    public Computer makeComputer() {
        Computer4Mac computer = new Computer4Mac();
        // 模拟复杂的初始化过程
        computer.setBrand("Mac");
        computer.setOperationSystem("Mac操作系统");
        return computer;
    }
}
java 复制代码
public class ComputerFactory4Mi implements ComputerFactory {

    @Override
    public Computer makeComputer() {
        Computer4Mi computer = new Computer4Mi();
        // 模拟复杂的初始化过程
        computer.setBrand("小米");
        computer.setOperationSystem("小米操作系统");
        return computer;
    }
}
java 复制代码
public class Client {
    public static void main(String[] args) {
        //生产Mac电脑
        ComputerFactory macFactory=new ComputerFactory4Mac();
        Computer computer4Mac = macFactory.makeComputer();
        System.out.println("computer4Mac = " + computer4Mac);

        //生产小米电脑
        ComputerFactory miFactory=new ComputerFactory4Mi();
        Computer computer4mi = miFactory.makeComputer();
        System.out.println("computer4mi = " + computer4mi);
    }

}
相关推荐
小梁努力敲代码3 小时前
java数据结构--List的介绍
java·开发语言·数据结构
摸鱼的老谭4 小时前
构建Agent该选Python还是Java ?
java·python·agent
lang201509284 小时前
Spring Boot 官方文档精解:构建与依赖管理
java·spring boot·后端
夫唯不争,故无尤也4 小时前
Tomcat 启动后只显示 index.jsp,没有进入你的 Servlet 逻辑
java·servlet·tomcat
zz-zjx4 小时前
Tomcat核心组件全解析
java·tomcat
Deschen4 小时前
设计模式-外观模式
java·设计模式·外观模式
why技术5 小时前
从18w到1600w播放量,我的一点思考。
java·前端·后端
夫唯不争,故无尤也5 小时前
JavaWeb流式传输速查宝典
java·流式传输
苏小瀚6 小时前
算法---位运算
java·算法
Camel卡蒙6 小时前
数据结构——二叉搜索树Binary Search Tree(介绍、Java实现增删查改、中序遍历等)
java·开发语言·数据结构