有时需要在应用程序中创建一个复杂的对象。 一种解决方案是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设计模式确实很有用。 教程中的示例并不难,但是现在您可以想象在什么情况下可以采用这种方法。 您可以在这里找到有关设计模式的更多文章。
翻译自: https://www.javacodegeeks.com/2013/06/design-patterns-builder.html