工厂方法模式

发布于 2024-09-10 10:28:21 字数 1552 浏览 14 评论 0

以一个框架型的类或方法为基础,继承生成不同类型的类或方法,通过不同类型的类或方法直接生成我们需要的对象

Topology


简单工厂模式 - 按钮

Code

/**
 * @description An abstract class for creating button
 * @param btn {HTMLButtonElement Object}
 */
class BtnFactory {
  const btn
  constructor(props) {
    if (new.target === Btn) {
      throw new TypeError("Cannot construct Abstract instances directly")
    }
    this.props.btn = new HTMLButtonElement()
  }
}
/**
 * @description A factory class for creating 
 * a square button
 * 
 * @param btn {HTMLButtonElement Object}
 */
class SquareBtnFactory extends BtnFactory {
  constructor() {
    super(props)
  }
  create() {
    const { btn } = this.props
    btn.classList.add('square')
    return btn
  }
}
/**
 * @description A factory class for creating 
 * a circle button
 * 
 * @param btn {HTMLButtonElement Object}
 */
class CircleBtnFactory extends BtnFactory {
  constructor() {
    super (props)
  }
  create() {
    const { btn } = this.props
    btn.classList.add('circle')
    return btn
  }
}

Summary

这个是我个人根据工厂方法模式设计的符合个人编码习惯的工厂方法模式, 原本的模式 会将产品生成类再从具体工厂中分离出来,但是每个工厂只是对应生产一种产品,所以个人认为没有必要

优点

面对同类不同型对象的生成场景,可以细分化对象不同型的生成工厂,当有新的需求,只需要创建新的工厂

缺点

当需要生成不同品牌,不同类别的产品时不适用

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

0 文章
0 评论
22 人气
更多

推荐作者

我们的影子

文章 0 评论 0

素年丶

文章 0 评论 0

南笙

文章 0 评论 0

18215568913

文章 0 评论 0

qq_xk7Ean

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文