关于面向对象设计模式中工厂设计模式的笔记

作用
将对象的创建过程封装到工厂中,使业务代码只依赖抽象、不依赖具体实现类,从而在新增产品或修改创建逻辑时,无需改动已测试的业务代码,降低引入新 bug 的风险。
注意:构造方法依然要定义在实现类内,工厂方法只负责调用new,以及其他可能存在的配置或缓存等new类时需要执行的操作。

应用范围
1:业务代码不应依赖具体实现类,只想面向抽象。
2:创建逻辑复杂(读配置、初始化、装配依赖等),不宜散落在业务代码中。
3:产品种类可能扩展,希望新增时不改已有代码。
4:需要在运行时根据参数/条件决定创建哪个产品(此时常配合 Map 注册表)。

基础编码流程
A1:新建产品接口(或抽象类),声明产品方法。若多个产品有统一属性,用抽象类做基类更合适。
A2:创建实现类,在实现类中实现方法,实现类内可以定义类属性。

B1:新建抽象工厂类,定义抽象创建方法,例如:createXXX()。(注意:并非构造方法)
B2:基于实现类数量,定义实现工厂类,实现创建方法。

C1:在调用时,通过 抽象工厂类 变量名 = new 实现工厂类 来获取工厂类,之后通过构造方法获取产品。

备注

  • 与@Resource的关系。
    Spring容器创建对象基于工厂模式,@Resource负责装配,二者的应对方向不同。@Resource 修饰的变量由容器在启动时(默认单例)创建并自动注入,适合"启动时就确认需要哪个实现类"的场景。,并自动注入,适合启动时就确认需要哪个实现类的接口。工厂模式需要调用创建方法才会创建对象,主要负责“谁来造,造哪个”的问题。工厂本身可以是 Spring Bean,用 @Resource 注入;工厂内部再按运行时条件创建产品。
posted @ 2026-09-08 22:11  RCCS_1154  阅读(10)  评论(0)    收藏  举报