经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
TypeScript实现设计模式——生成器模式
来源:cnblogs  作者:Tuzilow  时间:2020/11/9 16:08:20  对本文有异议

生成器模式是一种在TypeScript/JavaScript中非常常见的创建型设计模式,它使你能够分步骤创建复杂对象。当你需要创建一个可能有许多配置选项的对象时, 该模式会特别有用。

问题

假设我们需要构造一个复杂对象,构造时需要给这个对象的诸多成员变量进行初始化工作,如果使用传统的构造函数创建这个对象,那么它的构造函数将十分复杂,比如new Product(partA, partB, partC, ...),这样的构造函数不仅缺乏灵活性还会严重的影响代码的可读性,因此我们需要一种更优秀的方法来创建复杂对象。

创建想要生成的产品类

  1. class Product {
  2. public partA: string;
  3. public partB: string;
  4. public partC: string;
  5. public partD: string;
  6. }

创建生成器类

可以将基本生成器定义为一个接口,再为每个形式的产品创建具体的生成类,这里只定义一个生成器类作为演示

  1. class ProductBuilder {
  2. private product: Product;
  3. constructor() {
  4. // 创建要生成的对象
  5. this.product = new Product();
  6. }
  7. // 以下为给对象添加各部分的方法
  8. public setPartA(partA: string): this {
  9. this.product.partA = partA;
  10. return this;
  11. }
  12. public setPartB(partB: string): this {
  13. this.product.partB = partB;
  14. return this;
  15. }
  16. public setPartC(partC: string): this {
  17. this.product.partC = partC;
  18. return this;
  19. }
  20. public setPartD(partD: string): this {
  21. this.product.partD = partD;
  22. return this;
  23. }
  24. // 完成产品生成
  25. public build(): void {
  26. // 这里可以写具体的构建完成后要执行的操作
  27. console.log(this.product);
  28. }
  29. }

测试代码

  1. const product = new ProductBuilder()
  2. .setPartA('这是Part A')
  3. .setPartB('这是Part B')
  4. .setPartD('这是Part D')
  5. .build();
  6. // Product { partA: '这是Part A', partB: '这是Part B', partD: '这是Part D' }
  1. const product = new ProductBuilder()
  2. .setPartA('这是Part A')
  3. .setPartB('这是Part B')
  4. .build();
  5. // Product { partA: '这是Part A', partB: '这是Part B' }

原文链接:http://www.cnblogs.com/xueyubao/p/13746194.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号