为了账号安全,请及时绑定邮箱和手机立即绑定

当您想将一些通用功能应用于某些特定方法时使用的设计模式?

当您想将一些通用功能应用于某些特定方法时使用的设计模式?

慕码人2483693 2023-02-16 16:01:35
我正在尝试找出一种设计模式(如果存在的话)用于我将在一堆类中重新执行某些功能的情况。以下是我面临的问题的(简化)概述:我有一些 Java 代码来创建、更新、删除Student对象、Professor对象和Staff对象。每次创建、删除或更新此类对象时,我都想提取有关受影响对象的一些信息(例如姓名、年龄、ID)并通知外部服务。所以像:class StudentDAO {   public Student createStudent(Student studentToCreate) {       jdbcTemplate.update(INSERT_SQL, .....);       //===> extract some info of the student       //let external service know a student was created....   }   public Student deleteStudent(Student studentToDelete) {       jdbcTemplate.update(DELETE_SQL, .....);       //===> extract some info of the student       //let external service know a student was deleted....   }   //same thing for update}class ProfessortDAO {   public Professor createProfessor(Professor professorToCreate) {       jdbcTemplate.update(INSERT_SQL, .....);       //===> extract some info of the professor       //let external service know a Professor was created....   }   public Student deleteProfessor(Professor professorToDelete) {       jdbcTemplate.update(DELETE_SQL, .....);       //===> extract some info of the professor       //let external service know a professor was deleted....   }   //same thing for update}//repeat for Staff该示例有点做作,但假设Student, Professor,Staff没有共同的超类型。有没有一种方法可以实现此功能,而无需复制和粘贴用于提取信息的逻辑并将其发送到所有 DAO 类的 CREATE、DELETE、UPDATE 方法中?
查看完整描述

3 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

您应该搜索通用存储库。您可以在这里了解更多信息:


https://www.youtube.com/results?search_query=generic+repository+java


示例代码:


class Reposiory<T> {

   public T create(T Create) {

       jdbcTemplate.update(INSERT_SQL, .....);

   }

   public T delete(T Delete) {

       jdbcTemplate.update(DELETE_SQL, .....);

   }


}


查看完整回答
反对 回复 2023-02-16
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

没有太多信息可以继续,但您是否考虑过使用generics特定类型并实施 an来定义您希望从每种类型的个人访问的interface公共信息?(phone, name, id)

您还应该能够将操作(DELETE, ADD, UPDATE)作为参数传递。我建议enum为此使用 an 。


查看完整回答
反对 回复 2023-02-16
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

创建 ReportExternalService 接口并添加关键属性,如果对象需要通知,则实现此接口。

创建一个以 ReportExternalService 为参数的方法,并使用 key 向外部服务报告。!


查看完整回答
反对 回复 2023-02-16
  • 3 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信