简单工厂模式lua实现

OperationFactory = {}

Operation = {}

function Operation:new(o)
	o = o or {}
	setmetatable(o,self)
	self.__index = self
	o.NumberA = 0
	o.NumberB = 1
	return o
end

OperationAdd = Operation:new()

OperationSub = Operation:new()

OperationMul = Operation:new()

OperationDiv = Operation:new()

function OperationAdd:GetResult()
	if self.NumberA and self.NumberB then
		return self.NumberA + self.NumberB;
	else		
		return "error"
	end
end


function OperationSub:GetResult()
	if self.NumberA and self.NumberB then
		return self.NumberA - self.NumberB;
	else
		return "error"
	end
end


function OperationMul:GetResult()
	if self.NumberA and self.NumberB then
		return self.NumberA * self.NumberB;
	else
		return "error"
	end
end


function OperationDiv:GetResult()
	if self.NumberA and self.NumberB and self.NumberB~=0 then
		return self.NumberA / self.NumberB;
	else
		return "error"
	end
end



function OperationFactory : CreateOperation(oper)
	if oper == "+" then
		return OperationAdd:new()
	elseif oper == "-" then
		return OperationSub:new()
	elseif oper == "*" then
		return OperationMul:new()
	elseif oper == "/" then
		return OperationDiv:new()
	else
	end
end

Oper1 = OperationFactory:CreateOperation("+")
Oper1.NumberA = 10
Oper1.NumberB = 5
print(Oper1:GetResult())

Oper2 = OperationFactory:CreateOperation("-")
Oper2.NumberA = 10
Oper2.NumberB = 5
print(Oper2:GetResult())

Oper3 = OperationFactory:CreateOperation("*")
Oper3.NumberA = 10
Oper3.NumberB = 5
print(Oper3:GetResult())

Oper4 = OperationFactory:CreateOperation("/")
Oper4.NumberA = 10
Oper4.NumberB = 5
print(Oper4:GetResult())

输出结果:
15
5
50
2

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值