java - 应该用通用接口替换文字
问题描述
我正在编写使用策略模式的代码,但是我不确定我是否过度使用了我正在使用的抽象量。我正在使用各种概率分布(例如正态分布或均匀分布)为我的应用程序随机生成数字,或者不断生成数字(根本不是随机的)
不同的算法有不同的文字返回类型,一些返回 Ints 而另一些返回 Floats 和 Doubles。
遵循接口隔离原则,我创建了 ITYPEValuePicker 接口,每个接口都有以下定义:
public interface ITYPEValuePicker
{
public TYPE getTYPE();
}
其中“TYPE”是特定的数据类型,例如 float、int 等。
现在我的随机算法实现了这些接口,可以在代码中使用
GaussianValuePicker implements IFloatValuePicker, IDoubleValuePicker
和
UniformValuePicker implements IFloatValuePicker, IDoubleValuePicker, IIntValuePicker
和
ConstantValuePicker implements IIntValuePicker, IFloatValuePicker, IDoubleValuePicker
我的代码的很大一部分取决于随机选择的值和随机选择的算法来选择这些值。我的问题是:为什么我不应该用这些通用的“IValuePicker”替换所有幻数,并且将任何值的实际获取委托给特定的算法。
例如:
public class chicken
{
float height;
int age;
public chicken(float height, int age)
{
this.height = height;
this.age = age;
}
public boolean isSuperOld()
{
if (age > 99)
{
return true;
}
return false;
}
}
对比
public class chicken
{
IFloatValuePicker height;
IIntValuePicker age;
public chicken(IFloatValuePicker height, IIntValuePicker age)
{
this.height = height;
this.age = age;
}
public boolean isSuperOld()
{
if (age.getInt() > 99)
{
return true;
}
return false;
}
}
抱歉这个人为的例子,但我希望它说明了延迟的,几乎(懒惰[我不确定这是正确的术语]?)评估不同的值。这是 YAGNI 的一个例子(我知道它是否是 YAGNI 是相当繁重的上下文)还是这是对接口的有效使用?
解决方案
在您的计算器代码中使用Numberint/double/BigDecimal
for (all are Number
) 等:
float x = 0.12F;
Number n = x;
n = n.longValue() * 9;
x = n.doubleValue(); // 0.0F
包装类我从来没有发现有用 - 只有一种变量类型变量,如 JavaScript 的 Basic,但它们也远非最佳。
然后 API 用户必须准备数据就是生命。
推荐阅读
- bash - 如何使用管道运行程序并终止程序
- android - 以编程方式从 xml 代码中获取 Gridview 项
- python - Django 的 CORS 问题,缺少“Access-Control-Allow-Headers”
- python - 如何根据子目录获取不同的文件路径列表?
- c++ - 使用指针写入数组元素的问题
- android - 如何在 Android Studio 中获取最新的通话记录?
- python - 在 pandas 数据框中的两列中删除包含重复值的行
- php - 将自定义 REST api 登录与另一个网站集成
- swift - 为什么 view.layer.maskedCorners 的类型是 CACornerMask 而不是 [CACornerMask]?
- telegram-bot - 由于@提及,电报机器人命令在群聊中不起作用