Java中的设计模式(八):建造者模式
2021-05-16 09:31
标签:dag oba 相同 风格 意图 journal bst ring www 今天我们将研究java中的Builder模式。Builder 设计模式是一种创造性的设计模式,如工厂模式和抽象工厂模式。 我们可以通过提供具有所需参数的构造函数然后使用不同的setter方法来设置可选参数来解决大量参数的问题。这种方法的问题是,除非明确设置所有属性,否则Object状态将不一致。 Builder模式通过提供逐步构建对象的方法并提供实际返回最终Object的方法,解决了大量可选参数和不一致状态的问题。 将复杂对象的构造与其表示分开,以便相同的构造过程可以创建不同的表示。 现实世界的例子 想象一下角色扮演游戏的角色生成器。最简单的选择是让计算机为您创建角色。但是如果你想选择职业,性别,头发颜色等角色细节,那么角色生成将成为一个循序渐进的过程,在所有选择准备就绪时完成。 简单来说 允许您创建不同风格的对象,同时避免构造函数被污染。当有几种不同的构造函数时很有用。或者在创建对象时涉及很多步骤。 维基百科说 构建器模式是对象创建软件设计模式,其目的是找到伸缩构造器反模式的解决方案。 话虽如此,让我补充说一下伸缩构造器反模式是什么。某时某刻,我们都会看到如下构造函数: 正如您所看到的,构造函数参数的数量很快就会失控,并且可能很难理解参数的排列。此外,如果您希望将来添加更多选项,此参数列表可能会继续增长。这就被称为"the telescoping constructor anti-pattern"(可伸缩构造器的反模式)。 理智的替代方案是使用Builder模式。 让我们看看如何在java中实现构建器设计模式。 下面是示例构建器模式示例代码,首先,我们有我们想要创造的英雄 然后我们有了建设者 请注意,Hero类只有getter方法,没有公共构造函数。因此,获取Hero对象的唯一方法是通过HeroBuilder类。 然后它可以用作如下,显示如何使用Builder类来获取对象: 使用Builder模式时 Java类中的一些构建器模式示例是; 优点: 1、建造者独立,易扩展。 2、便于控制细节风险。 这就是java中的构建器设计模式的全部内容。 Java中的设计模式(八):建造者模式 标签:dag oba 相同 风格 意图 journal bst ring www 原文地址:https://www.cnblogs.com/jajian/p/9749138.html介绍
当Object包含许多属性时,引入了Builder模式来解决Factory和Abstract Factory设计模式的一些问题。
当Object包含许多属性时,Factory和Abstract Factory设计模式存在三个主要问题。
意图
定义
public Hero(Profession profession, String name, HairType hairType, HairColor hairColor, Armor armor, Weapon weapon) {
}
实例
public final class Hero {
private final Profession profession;
private final String name;
private final HairType hairType;
private final HairColor hairColor;
private final Armor armor;
private final Weapon weapon;
private Hero(Builder builder) {
this.profession = builder.profession;
this.name = builder.name;
this.hairColor = builder.hairColor;
this.hairType = builder.hairType;
this.weapon = builder.weapon;
this.armor = builder.armor;
}
}
public static class HeroBuilder {
private final Profession profession;
private final String name;
private HairType hairType;
private HairColor hairColor;
private Armor armor;
private Weapon weapon;
public Builder(Profession profession, String name) {
if (profession == null || name == null) {
throw new IllegalArgumentException("profession and name can not be null");
}
this.profession = profession;
this.name = name;
}
public Builder withHairType(HairType hairType) {
this.hairType = hairType;
return this;
}
public Builder withHairColor(HairColor hairColor) {
this.hairColor = hairColor;
return this;
}
public Builder withArmor(Armor armor) {
this.armor = armor;
return this;
}
public Builder withWeapon(Weapon weapon) {
this.weapon = weapon;
return this;
}
public Hero build() {
return new Hero(this);
}
}
Hero mage = new Hero.HeroBuilder(Profession.MAGE, "Riobard").withHairColor(HairColor.BLACK).withWeapon(Weapon.DAGGER).build();
使用场景
JDK中的Builder设计模式示例
总结
缺点: 1、产品必须有共同点,范围有限制。 2、如内部变化复杂,会有很多的建造类。
注意事项:与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。
翻译于:builder-design-pattern-in-java
参考:java-design-patterns
下一篇:使用PHP构建服务治理框架
文章标题:Java中的设计模式(八):建造者模式
文章链接:http://soscw.com/index.php/essay/86203.html