抽象类中定义抽象工厂方法,用abstract修饰返回抽象产品类型的方法,由子类实现具体创建逻辑,实现延迟实例化与开闭原则。

在抽象类中定义抽象的工厂方法,核心是用 abstract 修饰一个返回具体产品类型的方法,并让子类负责实现它。这样,创建对象的逻辑就从父类中剥离,推迟到子类决定——这就是延迟实例化的本质。
抽象工厂类必须声明抽象创建方法
抽象工厂类不直接 new 对象,而是定义一个抽象方法,约定“谁来造、造什么”。该方法返回抽象产品类型,保证调用方只依赖接口或抽象类:
- 方法不能有方法体,必须用 abstract 关键字
- 返回类型应为抽象产品(如
Product或Logger),而非具体实现类 - 可选泛型增强类型安全,例如
<T extends Product> T createProduct()
抽象产品类提供统一契约
所有具体产品都得实现同一个抽象产品(接口或抽象类),这样才能被工厂方法统一返回:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 定义公共行为(如
writeLog()、draw()) - 把差异化逻辑留给子类实现(用 abstract 方法或默认实现区分)
- 避免客户端代码感知具体类型,只面向抽象编程
具体工厂子类覆盖并返回真实实例
每个具体工厂继承抽象工厂,重写工厂方法,内部用 new 或反射等方式构造对应的具体产品:
立即学习“Java免费学习笔记(深入)”;
- 例如
FileLoggerFactory返回new FileLogger() - 例如
DatabaseLoggerFactory返回new DatabaseLogger() - 构造过程可封装复杂初始化(如连接池、配置加载),对客户端透明
客户端只依赖抽象,不碰 new 或字符串判断
调用方持有抽象工厂引用,调用抽象方法获得抽象产品,完全不知道背后是哪个类被实例化:
- 不再出现
if ("file".equals(type))这类硬编码分支 - 新增产品只需加新具体产品 + 新具体工厂,无需改原有工厂或客户端
- 符合开闭原则:对扩展开放,对修改关闭

















