`
897371388
  • 浏览: 528999 次
文章分类
社区版块
存档分类
最新评论

简单工厂模式lua实现

 
阅读更多
OperationFactory = {}


OperationAdd = {}

OperationSub = {}

OperationMul = {}

OperationDiv = {}



function OperationAdd:new(o)
	o = o or {}
	setmetatable(o,self)
	self.__index = self
	return o;
end

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


function OperationSub:new()
	o = o or {}
	setmetatable(o,self)
	self.__index = self
	return o;
end

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




function OperationMul:new()
	o = o or {}
	setmetatable(o,self)
	self.__index = self
	return o;

end

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


function OperationDiv:new()
	o = o or {}
	setmetatable(o,self)
	self.__index = self
	return o;

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())

交流群:315249378
如有不正确,欢迎交流讨论

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics