有时需要在应用程序中创建一个复杂的对象。 一种解决方案是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();
}
@Override
public void buildHitPoints() {
unit.setHitPoints(100);
}
@Override
public void buildArmor() {
unit.setArmor(50);
}
@Override
public void buildDamage() {
unit.setDamage(8);
}
@Override
public 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