有人能解释一下像service()、doGet()和doPost()这样的javax.servlet.http.HttpServlet方法是如何基于策略模式的吗?

有人能解释一下像service()、doGet()和doPost()这样的javax.servlet.http.HttpServlet方法是如何基于策略模式的吗?,java,oop,design-patterns,design-principles,Java,Oop,Design Patterns,Design Principles,我在某处读到javax.servlet.http.HttpServlet:service方法,以及所有接受HttpServletRequest和HttpServletResponse对象作为参数的doXXX方法。基于战略模式。我对此不清楚。如果有人能提供帮助,那就太好了?这是指服务的默认实现将检查HTTP方法HttpServletRequest对象的属性,然后只调用适当的doX方法,默认情况下,该方法返回一些“未实现”的HTTP错误,doHead除外,如果我没记错的话,调用doGet “战略模式

我在某处读到javax.servlet.http.HttpServlet:service方法,以及所有接受HttpServletRequest和HttpServletResponse对象作为参数的doXXX方法。基于战略模式。我对此不清楚。如果有人能提供帮助,那就太好了?

这是指服务的默认实现将检查HTTP方法HttpServletRequest对象的属性,然后只调用适当的doX方法,默认情况下,该方法返回一些“未实现”的HTTP错误,doHead除外,如果我没记错的话,调用doGet

“战略模式”等术语没有固定的定义。你是否觉得这是“战略模式”的一个很好的例子取决于谁来定义这个词。比如说,这与java中“public”一词的含义不同,后者有一个指令:它的意思正是java语言规范所说的意思。没有了。同样如此。我的观点是,“战略模式”之类的东西没有这样的规范


servlets的API非常糟糕,我绝对不会尝试使用它作为某种应该制作API的示例。我会看看Jersey之类的东西。

它指的是服务的默认实现将检查HTTP方法HttpServletRequest对象的属性,然后只调用适当的doX方法,默认情况下,该方法返回一些“未实现”的HTTP错误,doHead除外,如果我没有记错的话,调用doGet

“战略模式”等术语没有固定的定义。你是否觉得这是“战略模式”的一个很好的例子取决于谁来定义这个词。比如说,这与java中“public”一词的含义不同,后者有一个指令:它的意思正是java语言规范所说的意思。没有了。同样如此。我的观点是,“战略模式”之类的东西没有这样的规范


servlets的API非常糟糕,我绝对不会尝试使用它作为某种应该制作API的示例。我会看看像Jersey这样的东西。

根据维基百科,策略模式允许在运行时选择算法

所以如果你看一下过滤器,它们实现了doFilter方法,这就是算法。可以有ACL筛选器、命中计数器筛选器、GZIP筛选器等


过滤器在运行时应用取决于请求参数和服务器配置,因此我想您可以认为这是策略模式的一个示例。

根据Wikipedia,策略模式允许在运行时选择算法

所以如果你看一下过滤器,它们实现了doFilter方法,这就是算法。可以有ACL筛选器、命中计数器筛选器、GZIP筛选器等


过滤器是根据请求参数和服务器配置在运行时应用的,因此我想您可以认为这是策略模式的一个示例。

基于策略模式的GoF定义,这是一个糟糕的示例。策略对象不是调用它的方法的方法参数。策略模式是基于组合的,显然在HttpServlet中没有组合关系

此外,HttpServletRequest和HttpServletResponse参数不是算法系列。它们是数据载体

最后,HttpServlet不是子类化的替代方案。它是一个抽象类,因此专门为继承而设计


这个糟糕的例子在本书中重复。不幸的是,关于设计模式的错误信息是在线的。

基于GoF对策略模式的定义,这是一个糟糕的例子。策略对象不是调用它的方法的方法参数。策略模式是基于组合的,显然在HttpServlet中没有组合关系

此外,HttpServletRequest和HttpServletResponse参数不是算法系列。它们是数据载体

最后,HttpServlet不是子类化的替代方案。它是一个抽象类,因此专门为继承而设计


这个糟糕的例子在本书中重复。不幸的是,关于设计模式的错误信息是在线的。

战略模式的规范在中。这将是“四人帮战略模式”。就像python的for和java的for有不同的含义,但是它们都使用同一个词,您需要指定它。我还没有看到GoF对这个词有合法要求的法令。我想所有术语的含义都是有争议的。城市词典中HTTP和API的某些定义将极大地改变这个答案的含义。法律引文对未来读者理解这个答案是必要的吗
总的来说,在“战略模式”的含义上,我们几乎完全一致。无论如何,让我们来看看GoF的确切定义。我想说,对于“HTTP”一词,绝大多数社区都会同意;为了清晰起见,无需链接到RFC。战略模式的规范在中。这将是“四人帮战略模式”。就像python的for和java的for有不同的含义,但是它们都使用同一个词,您需要指定它。我还没有看到GoF对这个词有合法要求的法令。我想所有术语的含义都是有争议的。城市词典中HTTP和API的某些定义将极大地改变这个答案的含义。未来的读者需要引用法律来理解这个答案吗?如果整个社区几乎完全同意“战略模式”的含义,那么我们就用GoF的确切定义吧。我想说,对于“HTTP”一词,绝大多数社区都会同意;为了清楚起见,不需要链接到RFC。你在哪里读到的?请提供源代码的链接。你在哪里读到的?请提供源代码的链接。