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

我正在尝试找出一种设计模式(如果存在的话)用于我将在一堆类中重新执行某些功能的情况。以下是我面临的问题的(简化)概述:


我有一些 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 方法中?


慕码人2483693
浏览 92回答 3
3回答

慕勒3428872

您应该搜索通用存储库。您可以在这里了解更多信息:https://www.youtube.com/results?search_query=generic+repository+java示例代码:class Reposiory<T> {&nbsp; &nbsp;public T create(T Create) {&nbsp; &nbsp; &nbsp; &nbsp;jdbcTemplate.update(INSERT_SQL, .....);&nbsp; &nbsp;}&nbsp; &nbsp;public T delete(T Delete) {&nbsp; &nbsp; &nbsp; &nbsp;jdbcTemplate.update(DELETE_SQL, .....);&nbsp; &nbsp;}}

摇曳的蔷薇

没有太多信息可以继续,但您是否考虑过使用generics特定类型并实施 an来定义您希望从每种类型的个人访问的interface公共信息?(phone, name, id)您还应该能够将操作(DELETE, ADD, UPDATE)作为参数传递。我建议enum为此使用 an 。

胡说叔叔

创建 ReportExternalService 接口并添加关键属性,如果对象需要通知,则实现此接口。创建一个以 ReportExternalService 为参数的方法,并使用 key 向外部服务报告。!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java