用面向对象编程实现一个计算器程序,要求输入两个数和运算符号,得到结果。
#SingleInstance, Force
/**
* 运算类
* @author sunwind
*
*/
class Operation {
_numberA
{
get{
return this._numberA
}
}
_numberB
{
get{
return this._numberB
}
}
}
/**
* 加减乘除类 -- 加法类,继承运算类
* @author sunwind
*
*/
class OperationAdd extends Operation {
result[]
{
get{
return base._numberA + base._numberB
}
}
}
/**
* 加减乘除类 -- 减法类,继承运算类
* @author sunwind
*
*/
class OperationSub extends Operation {
result[]
{
get{
return base._numberA - base._numberB
}
}
}
/**
* 加减乘除类 -- 乘法类,继承运算类
* @author sunwind
*
*/
class OperationMul extends Operation {
result[]
{
get{
return base._numberA * base._numberB
}
}
}
/**
* 加减乘除类 -- 除法类,继承运算类
* @author sunwind
*
*/
class OperationDiv extends Operation {
result[]
{
get{
return base._numberA / base._numberB
}
}
}
;增加一个新运算,需要增加一个Operation的子类 比如,增加“指数运算” 就幢一个 OperationExp 类 继承 Operation
;并需要在简单运算工厂类中增加相应运算符即可。
class OperationExp extends Operation{
result[]
{
get{
return base._numberA ** base._numberB
}
}
}
/**
* 简单运算工厂类
* @author sunwind
*
*/
class OperationFacotry {
createOperate(operate){
oper :=""
switch (operate)
{
case "+":
oper := new OperationAdd()
case "-":
oper := new OperationSub()
case "*":
oper := new OperationMul()
case "/":
oper := new OperationDiv()
case "^":
oper := new OperationExp()
}
return oper
}
}
/**
* 客户端代码
* @author sunwind
*
*/
class Test{
main() {
oper:= ""
oper := OperationFacotry.createOperate("^")
oper._numberA:=2
oper._numberB:=3
result := oper.result
MsgBox % "结果是:" result
}
}
Test.main()
参考:《大话设计模式》之简单工厂模式(Java版)_J1012的博客-CSDN博客_大话设计模式java版