抽象类不能实例化,但作为工厂模式中产品体系的顶层契约,定义公共行为与属性;工厂类封装创建逻辑,根据条件返回具体子类实例,客户端仅依赖抽象类类型,实现解耦与多态。

抽象类本身不能直接实例化,但它是工厂模式中组织产品体系的核心基础。工厂模式通过封装创建逻辑,让调用方只面向抽象类(或接口)编程,而由工厂决定返回哪个具体子类的实例。
抽象类作为产品顶层定义
抽象类定义公共行为和共性属性,不关心具体实现。比如:
-
Animal 是抽象类,声明
run()抽象方法 -
Dog 和 Cat 分别继承 Animal 并实现
run() - 客户端代码只依赖
Animal类型,不写new Dog()
工厂类根据条件返回具体子类实例
工厂内部用 new 创建子类对象,但对外统一返回抽象类引用:
- 工厂方法如
createAnimal(String type)内部判断类型,返回new Dog()或new Cat() - 返回类型是
Animal,调用方拿到的是多态对象,可直接调用run() - 新增
Bird子类时,只需扩展工厂的判断逻辑,不改客户端代码
结合方式的关键点
这种结合不是语法强制,而是设计约定,重点在于:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 抽象类提供稳定的契约,子类负责具体实现
- 工厂类承担“选择谁来干活”的职责,屏蔽 new 的细节
- 客户端持有抽象类引用,运行时绑定到实际子类,体现多态本质
- 抽象类可含默认实现、构造器、protected 成员,比接口更灵活,适合有共性逻辑的场景
一个精简示例
假设抽象类 Payment 定义 pay(double amount),子类 WechatPay 和 Alipay 各自实现。工厂这样写:
return switch (channel) {
case "wechat" -> new WechatPay();
case "alipay" -> new Alipay();
default -> throw new IllegalArgumentException();
};
}
调用方:Payment p = PaymentFactory.create("wechat"); p.pay(100.0); —— 完全不知道也不需要知道背后是哪个子类。

















