java - 使用哪种设计模式来避免重复数据并一次又一次地发送相同的请求?
问题描述
有两个类 A 类和 B 类,两个类都使用相同的数据,我使用 HTTP 请求来获取数据。现在,由于这两个类都使用相同的数据,我可以利用继承并使用数据。但是每次我创建 A 类的实例时,它都会向服务器发送请求,而 B 类也会发生同样的事情。除了发送两个请求之外,是否有任何设计可以发送一个请求以及何时创建 A 类的对象或B类相同的数据将在不发送新请求的情况下使用?这是示例代码。
Class Parent {
type data;
requestService;
constructor(){
//retrieve data.
this.data = this.getData();
}
getData(){
//request server to get the data.
requestService.getDataFromServer();
}
}
Class A extends Parent{
action(){
//custom implementation for class A using data.
}
}
Class B extends Parent{
action(){
//custom implementation for class B using data.
}
}
在两个类之上使用相同的数据,但每个类的实现都发生了变化。现在我将只创建两个对象,一个是 A 类型,另一个是 B 类型。所以现在如果我创建 A 和 B 的对象,我将请求服务器两次,即使两个请求的响应数据将相同。所以我想发送一次请求,当我创建类型 A 和 B 的对象时,我将使用相同的数据而不是再次发送请求。有什么办法可以做到这一点吗?
解决方案
您需要使用观察者模式。当使用观察者模式时,A 和 B 类成为您的观察者,您的数据(HTTP 请求)将成为发布者。
观察者模式- 定义对象之间的一对多依赖关系,这样当一个对象改变状态时,它的所有依赖关系都会自动得到通知和更新。
主题接口- 对象使用此接口注册为观察者,也可以将自己移除为观察者。
观察者- 所有潜在的观察者都需要实现观察者接口。
ConcreteSubject - 始终实现主体。除了注册和删除方法外,具体主体还实现了 notifyobservers() 方法,用于在状态更改时更新所有当前观察者。
ConcreteObserver - 可以是任何实现 Observer 接口的类。每个观察者注册一个具体的主题以接收更新。
在您的情况下,主题类可以定义如下
interface Parent{
void registerObserver();
void removeObserver();
notifyObserver();
}
那么你Parent class
应该实现Parent。registerObserver
方法应该能够注册其他类 A 和 B 或任何其他需要父数据的类。removeObserver
应该能够删除这些类。
class ParentImpl implements Parent{
void registerObserver(){...}
void removeObserver(){....}
void notifyObserver(){...}
getData(){....}
}
然后观察者类将有一个简单的类定义如下
interface Observer{
void update();
}
最后,您的 A 类和 B 类将实现 Observer
class B implements Observer{
.......
}
与 B 类或任何需要使用父数据的新类相同。
class A implements Observer{
......
}
推荐阅读
- python - 如何在扩展的 Django 模板中发出 GET 请求
- load-balancing - 带有连接跟踪的 nftables L2 负载平衡
- python - 在命令行中使用 subprocess.Popen() 执行的脚本打印“导出完成”后立即关闭 Blender
- javascript - 如何正确地将两个 crons 放入方法中?
- docker - 限制 docker 可以分配的 CPU 内核总数
- iis - IIS 托管 - 网站要求登录提示
- scikit-learn - scikit-learn 的 Yocto 食谱 (dunfell)
- python - Pandas Resample 不起作用 - 删除重复也不起作用
- reactjs - 我们可以在打字稿中实现反应状态属性的接口吗?
- python - Plotly Dash:将指标标题放在数字的左侧