使用String.format
,似乎在编译时找不到编程错误的大开口。这可能使修复错误更复杂和/或花费更长时间。对于我来说,这是我打算修复(或破解解决方案)的问题。我走近了,但我还不够近。对于这个问题,这肯定是过度设计的。我理解这一点,但我只想找到一个很好的编译时解决方案。
可在此处找到更多信息。我的问题涉及
2个计算器。 1逻辑后端。可以扩展到包括其他简单的计算器。
我想要一个类来处理任何这类简单计算器的所有操作(listeners
)。
由于这个推理,我决定用Enums抽象格式字符串 - https://stackoverflow.com/a/9850656/2333021。每个表达式都有一定数量的"分区",它将以更易读和可靠的形式出现。
我有一个listener
应该只处理执行从UI获取数字的逻辑,执行计算,以及将结果设置到UI。它不应该知道结果的格式。解决方案应该允许在编译时找到错误,而不是运行时。
现在我的实施似乎遇到了其中一些
@Override
public void onClick(View v) {
// Get number 1 and number 2. Perform operation via Strategy Pattern
{
// ISSUE This seems to be fine if I only cared about THIS class only dealing with one expression, but I want it to handle both (not at the same time though)
// These seem too coupled right now. I just have both Expression and
// DogeExpression here for now. But I do kind of like the the execution
Expression.Number1.update(num1); // Enum Expression
Expression.Number2.update(num2);
Expression.Operator.update(operator.getSign());
Expression.Result.update(total);
DogeExpression.Total.update(total); // Enum DogoExpression
}
UI.setResult(Expression.Update.print());
// UI.setResult(DogeExpression.Update.print()); // Switch to this for DogeExpression
}
对于OperationClick
,我认为这只是一个问题,因为我设置项目的方式。我希望有多个UI,看起来,控制稍有不同,并且行为有点不同......
btnAdd.setOnClickListener(new OperationClick(Add).listenerOn(this));
btnSub.setOnClickListener(new OperationClick(Subtract).listenerOn(this));
btnMul.setOnClickListener(new OperationClick(Multiply).listenerOn(this));
btnDiv.setOnClickListener(new OperationClick(Divide).listenerOn(this));
我的OperationClick
课程中有onClick(View v)
个代码,而且我不会有重复的内容。我使用策略模式抽象出数学逻辑。这个类应该只关心如何进行数学运算。它不应该关心它在UI上的显示方式,但它需要分配/更新表达式。