gpt4 book ai didi

java - X 参数中的一些候选强制参数?

转载 作者:行者123 更新时间:2023-12-01 10:10:51 24 4
gpt4 key购买 nike

我遇到了设计问题,无法找到“正确”的解决方案或模式。让我用代码来解释一下。

//Mandatory set 1
int minDamage;
int maxDamage;

//Mandatory set 2
int damage;

需要提供强制集 1 或强制集 2 来创建此对象。这可以通过两个不同的重载构造函数轻松解决。但是如果我添加这个强制集会怎么样?

//Mandatory set 3
int percentageBasedDamage;

我不能同时包含相同的单一数据类型的重载。是的,我可以将最后一个设置为 float ,但是如果我添加其他几个强制集会发生什么?我最终用完了数据类型。构建器模式在这里似乎没有帮助。我唯一能想到的就是提供所有强制方法,但这可能最终会出现在带有大量参数的构造函数中。另外还不清楚如何使用该物体,我希望它能够造成最小/最大伤害、指定伤害或基于百分比的伤害。

public class MyObject
{
int minDamage;
int maxDamage;
int damage;
int percentageBasedDamage;

public MyObject(int minDamage, int maxDamage, int damage, int percentageBasedDamage)
{
this.minDamage = minDamage;
//...
}
}

MyObject myObject = new MyObject(10, 18, 0, 0); //Correct usage

MyObject myObject = new MyObject(0, 0, 5, 8); //Incorrect usage

Java 必须提供一些东西来解决这个问题。

编辑

关于使用构建器模式,我实际上想了很多,但无法弄清楚。黑暗骑士的答案最终让我大开眼界,我想出了这个:

public class Damage extends Action {
String target;
String type;
int minDamage;
int maxDamage;
int damage;
int currentHealthPercentageDamage;
int maxHealthPercentageDamage;

private Damage(Builder build) {
target = build.target;
this.type = build.type;
this.minDamage = build.minDamage;
this.maxDamage = build.maxDamage;
this.damage = build.damage;
this.currentHealthPercentageDamage = build.currentHealthPercentageDamage;
this.maxHealthPercentageDamage = build.maxHealthPercentageDamage;
}

public static class Builder
{

private String target;
private String type;
private int minDamage;
private int maxDamage;
private int damage;
private int currentHealthPercentageDamage;
private int maxHealthPercentageDamage;

public Builder(String target, String type) {
this.target = target;
this.type = type;
}

public Damage minmax(int minDamage, int maxDamage)
{
this.minDamage = minDamage;
this.maxDamage = maxDamage;
return new Damage(this);
}

public Damage damage(int damage)
{
this.damage = damage;
return new Damage(this);
}

public Damage currentHealthPercentageDamage(int currentHealthPercentageDamage)
{
this.currentHealthPercentageDamage = currentHealthPercentageDamage;
return new Damage(this);
}

public Damage maxHealthPercentageDamage(int maxHealthPercentageDamage)
{
this.maxHealthPercentageDamage = maxHealthPercentageDamage;
return new Damage(this);
}

}

由于构建返回了 Damage 类,所以选择了一个“强制集”,现在它已经被正确设计并清楚了如何实例化和使用此类。

最佳答案

考虑使用构建器模式并让调用者决定要传递的参数,而不是强制调用者使用不同的构造函数。请参阅this

关于java - X 参数中的一些候选强制参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36129113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com