Javascript 工厂模式和条件类之间的区别?

Javascript 工厂模式和条件类之间的区别?,javascript,oop,design-patterns,error-handling,factory,Javascript,Oop,Design Patterns,Error Handling,Factory,我有一些关于工厂模式的问题,我将尝试使用JS中处理HTTP错误的示例来说明这些问题 据我所知,“适当”工厂将根据传递给工厂的参数实例不同的ErrorXXX类,如下所示: class HTTPError { createError(code) { if (code === 'NOT_FOUND') { return new Error404() } else if (code === 'NOT_AUTH') {

我有一些关于工厂模式的问题,我将尝试使用JS中处理HTTP错误的示例来说明这些问题

据我所知,“适当”工厂将根据传递给工厂的参数实例不同的ErrorXXX类,如下所示:

    class HTTPError {
        createError(code) {
          if (code === 'NOT_FOUND') {
            return new Error404()
          } else if (code === 'NOT_AUTH') {
            return new Error401()
          }
    
          // etc....
    
        }
    }

但由于在本例中,所有类都具有相同的属性,因此可以在单个类中为这些属性指定条件值,而不是实例化许多不同的类

    class HTTPError {
      createError(code) {
        let status = 500
        let message = 'Server error'

        if (code === 'NOT_FOUND') {
          status = 404
          message = 'Page not found'
        } else if (code === 'NOT_AUTH') {
          status = 401
          message = 'Resource not authorized'
        }

        // etc...

        return {status, message}
      }
    }
我的问题是:

  • 这两种模式的不同目的是什么
  • 哪一个更适合本例中的任务
  • 第二种图案有名字吗

  • 为什么工厂函数存在于
    HttpError
    类上?什么是“条件类”?对于第一个问题:只是一个偏好,javascript类最终比构造函数更重要。对于“条件类”,我读起来更自然。抱歉,没有澄清,我指的是一个根据条件语句(第二个示例)按程序为属性赋值的类,但它不赋值,它创建了一个新对象(使用对象文字语法)。实际上,任何函数都不应该存在于不使用至少一个实例属性(通过
    this
    )的
    类上-如果类没有状态,则它不应该是
    ,而应该是普通对象。如果你的Java思维方式是所有东西都必须生活在一个
    类中
    ,那么至少对工厂函数使用
    静态
    方法,这些将比您当前的代码更有意义,并且将有更清晰的权衡。