我正在考虑这个例子

case 1:没有工厂模式

客户1

SMSNotification notification = new SMSNotification();
notification.notifiyUser();

客户2

EmailNotification notification = new EmailNotification();
notification.notifiyUser();

case 2:工厂模式

客户1

Notification notification = notificationFactory.createNotification("SMS");
notification.notifiyUser();

客户2

Notification notification = notificationFactory.createNotification("Email");
notification.notifiyUser();

现在,假设通知团队在他们的库中添加了一个新的通知系统,如果假设客户机2想要包含这个系统,那么在 case 1中,我必须更改具体的类名,在 case 2中,我必须将字符串值更改为新的值,所以在这两种情况下,我都必须进行更改.

工厂设计模式有什么帮助?

推荐答案

Quick Answer

可以从外部属性文件中读取"SMS"或"Email"字符串.

然后,您可以配置工厂,而无需重新编译项目.


Addition information

我们还使用了一种叫做分离关注点SoC的设计原则.可以有多个"关注点"分开,例如业务逻辑和数据检索.

SoC的一个特点是将配置和应用逻辑分离.应用这一点,我们可以配置应用程序的行为,这可能非常有用.

例如,我们可以在测试环境和生产环境中运行相同的应用程序代码,唯一的区别是配置.

Java相关问答推荐

如何以干净的方式访问深度嵌套的对象S属性?

如何调整工作时间日历中的时间

在AVL树的Remove方法中使用NoSuchElementException时遇到问题

无法初始化JPA实体管理器工厂:无法确定为Java类型<;类>;推荐的JdbcType

Java:使用Class.cast()将对象转换为原始数组

基于接口的投影、原生查询和枚举

每次FXMLLoader调用ApplationConext.getBean(类)时创建@Component的新实例

如何从日志(log)行中删除包名称?

使用Class.this.field=Value初始化构造函数中的最后一个字段会产生错误,而使用this.field=Value则不会

如何创建模块信息类文件并将其添加到JAR中?

如何根据配置动态创建N个bean

在一行中检索字符分隔字符串的第n个值

在实例化中指定泛型类型与不指定泛型类型之间的区别

在Java中将.GRF转换为图像文件

Cucumber java-maven-示例表-未定义一步

java21预览未命名的符号用于try-with-resources

如何在Java中正确实现填字游戏求解器

在外部类和内部类之间,当调用外部类内部或外部的主方法时,它们的静态初始化程序的运行顺序不同

将在 Docker 中运行的 Spring Boot 连接到在 Docker 中运行的 PostgreSQL,无需 compose 文件?

更新不可变的深层嵌套字段