设计模式:生成器

本文探讨了在创建复杂对象时使用Builder设计模式的情况。Builder模式允许在隐藏创建过程的同时,构造不同表示形式的对象。通过一个星际争霸游戏单位的例子,展示了如何通过Director类和具体Builder类(ZealotBuilder)来构建产品(Zealot)。这个模式在需要多个独立对象组合成一个复杂对象时非常有用。
摘要由CSDN通过智能技术生成

有时需要在应用程序中创建一个复杂的对象。 一种解决方案是Factory模式,另一种是Builder设计模式。 在某些情况下,您甚至可以结合使用这两种模式。 但是在本文中,我想研究一下Builder设计模式。 我需要说的第一件事是创造模式。

java-design-patterns
在什么情况下应该使用Builder设计模式? 绝对在创建对象时需要大量其他独立对象。 当您想向用户隐藏创建过程时。 在构建过程结束时可以具有不同的对象表示形式。

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

生成器设计模式Java

正如我提到的,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设计模式确实很有用。 本教程中的示例并不难,但是现在您可以想象在什么情况下可以采用这种方法。 您可以在此处找到有关设计模式的更多文章。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值