我正在製作控制檯計算器作爲測試項目。我實現它的主要特點是,我從ITERM接口繼承的數字和運算符類:我的代碼是否違反單一責任原則?
public interface ITerm
{
Object Value { get; }
}
現在,我繼承它IOperand和IOperator接口,並通過逆波蘭符號使用在進一步計算這些intefaces 。
現在,我被告知使用這個Object-type屬性來保存數字和操作符是違反單一責任原則的。
private ITerm CalculatePostfixExpression(IEnumerable<ITerm> input)
{
var tempResult = new Stack<ITerm>();
foreach (var term in input)
{
if (term is IOperand)
{
tempResult.Push(term as IOperand);
}
if (term is IOperator)
{
tempResult.Push(ProceedOperation(term as IOperator, tempResult));
}
}
return tempResult.Peek();
}
這是我如何處理計算。所以有兩個問題: 1.我的想法在Object變量中存儲操作數和運算符有一些缺陷嗎? 2.是否有一些方法來改進我的代碼?我正在考慮在CalculatePostfixExpression方法中使用訪問者模式。
你應該張貼在這裏:HTTP://代碼審查.stackexchange.com/ –
感謝您指導我,我應該在codereview上發佈後刪除我的問題嗎? –