我正在编写一个模拟RLC电路的程序。该程序根据电路类型和源类型(RLC、LC、RC、正弦、直流、正方形……)进行一些具体计算。稍后将其添加到图表中。
下面的代码按照我需要的方式工作,但我的老师告诉我,如果我为每个案例创建一个单独的类会更好,因为太多的if语句并不好。
if(scheme == "RLC"){
beta = R / (2*L);
omega0Square = 1/ (L*C);
//Resonant
if (omega * omega == omega0Square
&& beta >= Math.sqrt(omega0Square) / Math.sqrt(2)){
chargeAmp = U0 / (L*2*beta*Math.sqrt(omega0Square - beta*beta));
fi = Math.atan(Math.sqrt(omega0Square-2*beta*beta)/beta);
}
//Non-resonant
else{
omegasDifference = (omega0Square - omega * omega);
fi = Math.atan(2 * beta * omega / omegasDifference);
chargeAmp = U0/(L*Math.sqrt(omegasDifference * omegasDifference
+ 4 * beta * beta * omega * omega));
}
intensity = chargeAmp*omega* Math.cos(omega*time-fi);
rU = R * intensity;
cQ = chargeAmp*Math.sin(omega*time-fi);
lE = L*intensity*intensity/2;
}
if(scheme == "LC"){
}
if(scheme == "RC"){
}
if(scheme == "R"){
}
if(scheme == "L"){
}
if(scheme == "C"){
}
if(scheme == "Non"){
}如果我为每个case都创建了一个类,我如何在以后管理它们,并在不使用If语句的情况下调用它们呢?我是这样想的:
String name;
name variable = new name();有可能吗?还是有更好的方法?
发布于 2014-05-09 00:06:53
使用接口和factory pattern
创建一个类来保存值( R,L,C)
public class RLCHolder {
double rValue;
double lValue;
double cValue;
//Setter and Getters
}创建接口
public interface CircuitCalculator {
public double calculate(RLCHolder rlcHolder);
}现在实现接口
public class RLCCircuitCalculator implements CircuitCalculator {
@Override
public double calculate(RLCHolder rlcHolder) {
// Do you Math and Return
return 0;
}
}像这样为其他电路添加你的实现。
LCCircuitCalculator、RCCircuitCalculator等
现在创建Factory方法并调用calculate方法
public class Calculator {
// factory method
public static CircuitCalculator getCircuitCalculator(String circuitName){
CircuitCalculator circuitCalculator = null;
if (circuitName.equals("RLC")){
circuitCalculator = new RLCCircuitCalculator(); // You can cache if you dont maintain state
}else if (circuitName.equals("LC")){
// return LC object
}//add your implementation..
return circuitCalculator;
}
public static void main(String args[]){
RLCHolder rlcHolder = new RLCHolder();
double result = Calculator.getCircuitCalculator("RLC").calculate(rlcHolder);
}
}发布于 2014-05-09 00:02:15
因为你有不同的电路,我认为你不能不使用if语句或者更优雅的方式来使用switch。你的老师的意思是为每个电路创建单独的类,因为他希望你在if语句中有一小块代码,如果你像现在这样开始编码,它将是一个巨大的函数。
https://stackoverflow.com/questions/23546500
复制相似问题