Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 要使用哪种设计模式来避免重复数据和一次又一次地发送相同的请求?_Java_Oop_Design Patterns - Fatal编程技术网

Java 要使用哪种设计模式来避免重复数据和一次又一次地发送相同的请求?

Java 要使用哪种设计模式来避免重复数据和一次又一次地发送相同的请求?,java,oop,design-patterns,Java,Oop,Design Patterns,有两个类A和B,这两个类使用相同的数据,我使用HTTP请求来获取数据。现在,由于两个类使用相同的数据,我可以利用继承并使用数据。但是,每次我创建类A的实例时,它都会向服务器发送请求,而类B也会发生同样的事情。是否有任何设计可以不发送两个请求,而是发送一个请求,并且当我创建类A或类B的对象时,将使用相同的数据而不发送新的请求?下面是示例代码 Class Parent { type data; requestService; constructor(){ //retr

有两个类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的对象i将使用相同的数据,而不是再次发送请求。有什么方法可以实现这一点吗?

您需要使用观察者模式。使用观察者模式时,类A和B将成为您的观察者,您的数据(HTTP请求)将成为发布者

观察者模式定义了对象之间的一对多依赖关系,以便当一个对象改变状态时,其所有依赖项都会得到通知并自动更新

主题界面-对象使用此界面注册为观察者,并将自身移除为观察者

观察者-所有潜在观察者都需要实现观察者界面

ConcreteSubject-始终实现subject。除了register和remove方法外,concrete subject还实现notifyobservers()方法,用于在状态更改时更新所有当前观察者

ConcreteObserver-可以是实现Observer接口的任何类。每个Observer向一个具体主题注册以接收更新

在您的情况下,主题类可以定义如下

interface Parent{
void registerObserver();
void removeObserver();
notifyObserver();
}
interface Observer{
  void update();
}
然后您的
父类
应该实现父类。
registerObserver
方法应该能够注册其他类A和B或任何其他需要父类数据的类。
removeObserver
应该能够删除这些类

class ParentImpl implements Parent{
  void registerObserver(){...}
  void removeObserver(){....}
  void notifyObserver(){...}
  getData(){....}
}
Observer类将有一个简单的类,定义如下

interface Parent{
void registerObserver();
void removeObserver();
notifyObserver();
}
interface Observer{
  void update();
}
最后,类A和B将实现Observer

class B implements Observer{
.......
}
与类B或任何需要使用父数据的新类相同

class A implements Observer{
......
}

当您创建/构造对象时,让它们发送请求,这听起来像是一个糟糕的设计。您应该停止解释代码,并实际展示一些,对象是如何相关的,您是如何构造它们的,请求是如何发出的/数据是如何检索的?请提供一个代码示例,帮助理解类a和类B之间的差异。