设计模式 建造者模式

有时需要在应用程序中创建一个复杂的对象。 一种解决方案是Factory模式,另一种是Builder设计模式。 在某些情况下,您甚至可以结合使用这两种模式。 但是在本文中,我想研究一下Builder设计模式 。 我需要说的第一件事是创造模式。 在什么情况下应该使用Builder设计模式? 绝对在创建对象时需要大量其他独立对象。 当您想向用户隐藏创建过程时。 在构建过程结束时可以具有不同对象的表示形式。

让我们继续一个代码示例。 模式的UML方案:

正如我提到的,Builder模式是创造模式。 这种情况意味着在过程结束时会创建一些对象(产品)。 该产品是在具体构建器的帮助下创建的,而该构建器又具有一些父构建器类或接口。 模式的最后一点是Director类,它负责为适当的产品创建具体的构建器。

该示例将基于著名的史诗般的电脑游戏-星际争霸。 该产品将扮演狂热分子的角色,这是一个简单的神族战斗单位。 导演的角色将扮演门户。 混凝土建造者是ZealotBuilder。 我将在下面提供的所有代码:

游戏单位的抽象类:

public abstract class Unit {protected int hitPoints;protected int armor;protected int damage;public int getHitPoints() {return hitPoints;}public void setHitPoints(int hitPoints) {this.hitPoints = hitPoints;}public int getArmor() {return armor;}public void setArmor(int armor) {this.armor = armor;}public int getDamage() {return damage;}public void setDamage(int damage) {this.damage = damage;}}

狂热者的类别(产品):

public class Zealot extends Unit {public String toString() {return "Zealot is ready!"+"\nHitPoints: "+getHitPoints()+"\nArmor: "+getArmor()+"\nDamage: "+getDamage();}}

生成器的界面:

public interface UnitBuilder {public void buildHitPoints();public void buildArmor();public void buildDamage();public Unit getUnit();}

构建器接口的实现:

public class ZealotBuilder implements UnitBuilder {private Unit unit;public ZealotBuilder() {unit = new Zealot();}@Overridepublic void buildHitPoints() {unit.setHitPoints(100);}@Overridepublic void buildArmor() {unit.setArmor(50);}@Overridepublic void buildDamage() {unit.setDamage(8);}@Overridepublic Unit getUnit() {return unit;}}

网关(导演)类:

public class Gateway {public Unit constructUnit(UnitBuilder builder) {builder.buildHitPoints();builder.buildArmor();builder.buildDamage();return builder.getUnit();}}

现在让我们看看它如何一起工作:

...public static void main(String[] args) {UnitBuilder builder = new ZealotBuilder();Gateway director = new Gateway();Unit product = director.constructUnit(builder);System.out.println(product);}
...

最后一个代码段的结果是:

Zealot is ready!
HitPoints: 100
Armor: 50
Damage: 8

因此,如您所见,在需要创建复杂对象的情况下,Builder设计模式确实很有用。 本教程中的示例并不难,但是现在您可以想象在什么情况下可以采用这种方法。 您可以在此处找到有关设计模式的更多文章。

参考: 设计模式: JCG合作伙伴 Alexey Zvolinskiy的构建者,位于Fruzenshtein的注释博客中。

翻译自: https://www.javacodegeeks.com/2013/06/design-patterns-builder.html

设计模式 建造者模式

设计模式 建造者模式_设计模式:建造者相关推荐

  1. 设计模式 原型模式_设计模式:原型

    设计模式 原型模式 创新设计模式之一是原型设计模式 . 尽管原型是创造模式,但它在概念上与其他模式有所区别. 我的意思是原型在某种意义上创造了自己. 我将在下面解释. 原型模式的所有魔力都基于Java ...

  2. 建造者模式java_java设计模式3——建造者模式

    java设计模式3--建造者模式 1.建造者模式介绍: 建造者模式属于创建型模式,他提供了一种创建对象得最佳方式 定义: 将一个复杂对象的构建和与它的表示分离,使得同样的构建过程可以创建不同的表示 主 ...

  3. java设计模式 建造模式_java设计模式(三)建造者模式

    开篇废话 周末因懒的原因,停更了两天.今天主要研究建造者模式.畅游各大博客网站,推荐一篇关于建造者模式的博客http://blog.csdn.net/self_study/article/detail ...

  4. java设计模式 建造模式_理解java设计模式之建造者模式

    理解java设计模式之建造者模式 发布于 2020-12-10| 复制链接 摘记: 建造者模式(Builder Pattern)主要用于"分步骤构建一个复杂的对象",在这其中&qu ...

  5. 创建型模式、结构型模式和行为型模式_设计模式之创建型模式

    设计模式GOF23(Group of Four) 设计模式可分为三种类型: 创建型模式:单例模式,工厂模式,抽象工厂模式,建造者模式,原型模式. 结构型模式:适配器模式,桥接模式,装饰模式,组合模式, ...

  6. python实现模式_设计模式-python实现

    设计模式是什么? 设计模式是经过总结.优化的,对我们经常会碰到的一些编程问题的可重用解决方案.一个设计模式并不像一个类或一个库那样能够直接作用于我们的代码.反之,设计模式更为高级,它是一种必须在特定情 ...

  7. 设计模式 原型模式_创新设计模式:原型模式

    设计模式 原型模式 原型模式用于创建对象的副本. 这种模式非常有用,特别是当从头开始创建对象的成本很高时. 与builder , factory和abstract factory模式相比,它不会从头开 ...

  8. java设计模式迭代器模式_迭代器设计模式示例

    java设计模式迭代器模式 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式 ...

  9. java设计模式迭代器模式_迭代器模式和Java

    java设计模式迭代器模式 大家好,在本文中,我们将检查Iterator Pattern . 我知道你们中许多人已经使用过一种设计模式,但是也许您没有意识到它是模式,或者不知道它的巨大价值. 根据&l ...

最新文章

  1. 软件从业人员如何激发敏捷团队?
  2. 《Abaqus GUI程序开发指南(Python语言)》——第一章 概述1.1 简单插件实例——创建带孔板有限元模型...
  3. Canvas3 绘图和重叠
  4. freemarker常见语法大全
  5. 在本地实现完成多台服务器之间文件拷贝
  6. 飞鸽传书2012绿色版下载
  7. django-登陆功能-使用ajax实现
  8. dubbo consumer 端口_Dubbo普普通通9问
  9. bzoj2822 [AHOI2012]树屋阶梯 dp
  10. 应届生月薪2W,财务人却不涨薪?那是你不会这种财务分析
  11. aspose-cell 使用
  12. TCP/IP网络编程
  13. Apk打包-apk的解压和压缩实验
  14. 子龙山人:我从Cocos2d-x团队里学到的
  15. 【教程】使用腾讯云轻量应用服务器搭建 Guacamole 远程桌面代理服务器,让境外小鸡远程不再卡顿!!
  16. PIL.image保存图片
  17. BGP路由器协议排错教程:BGP 对等体翻动问题
  18. 鸿蒙 悟空遥控,悟空遥控器(com.wukongtv.wkremote.client) - 3.9.3.0 - 应用 - 酷安
  19. [安卓开发] 快递物流信息布局
  20. 风电远程监控系统解决方案,双碳战略下新能源运维市场正当红

热门文章

  1. 解决Html5用canvas绘制不出来图片的问题
  2. Java IO: FileReader和FileWriter
  3. 阿里面试回来,想和 Java 程序员谈一谈
  4. 接口 Closeable
  5. 一步一步详解高斯日记
  6. springboot点击运行没反应,什么都不显示的解决方式
  7. 多久没有给家里打过电话了?
  8. ssh(Spring+Spring mvc+hibernate)——hibernate.cfg.xml
  9. blog项目中遇到的问题及解决
  10. mysql---批量插入数据:100w条数据