简单工厂模式lua实现

  1. OperationFactory = {}
  2.  
  3. Operation = {}
  4.  
  5. function Operation:new(o)
  6. o = o or {}
  7. setmetatable(o,self)
  8. self.__index = self
  9. o.NumberA = 0
  10. o.NumberB = 1
  11. return o
  12. end
  13.  
  14. OperationAdd = Operation:new()
  15.  
  16. OperationSub = Operation:new()
  17.  
  18. OperationMul = Operation:new()
  19.  
  20. OperationDiv = Operation:new()
  21.  
  22. function OperationAdd:GetResult()
  23. if self.NumberA and self.NumberB then
  24. return self.NumberA + self.NumberB;
  25. else
  26. return "error"
  27. end
  28. end
  29.  
  30.  
  31. function OperationSub:GetResult()
  32. if self.NumberA and self.NumberB then
  33. return self.NumberA - self.NumberB;
  34. else
  35. return "error"
  36. end
  37. end
  38.  
  39.  
  40. function OperationMul:GetResult()
  41. if self.NumberA and self.NumberB then
  42. return self.NumberA * self.NumberB;
  43. else
  44. return "error"
  45. end
  46. end
  47.  
  48.  
  49. function OperationDiv:GetResult()
  50. if self.NumberA and self.NumberB and self.NumberB~=0 then
  51. return self.NumberA / self.NumberB;
  52. else
  53. return "error"
  54. end
  55. end
  56.  
  57.  
  58.  
  59. function OperationFactory : CreateOperation(oper)
  60. if oper == "+" then
  61. return OperationAdd:new()
  62. elseif oper == "-" then
  63. return OperationSub:new()
  64. elseif oper == "*" then
  65. return OperationMul:new()
  66. elseif oper == "/" then
  67. return OperationDiv:new()
  68. else
  69. end
  70. end
  71.  
  72. Oper1 = OperationFactory:CreateOperation("+")
  73. Oper1.NumberA = 10
  74. Oper1.NumberB = 5
  75. print(Oper1:GetResult())
  76.  
  77. Oper2 = OperationFactory:CreateOperation("-")
  78. Oper2.NumberA = 10
  79. Oper2.NumberB = 5
  80. print(Oper2:GetResult())
  81.  
  82. Oper3 = OperationFactory:CreateOperation("*")
  83. Oper3.NumberA = 10
  84. Oper3.NumberB = 5
  85. print(Oper3:GetResult())
  86.  
  87. Oper4 = OperationFactory:CreateOperation("/")
  88. Oper4.NumberA = 10
  89. Oper4.NumberB = 5
  90. print(Oper4:GetResult())

输出结果:
15
5
50
2

posted @ 2020-10-30 17:50  奋斗小青年1  阅读(168)  评论(0)    收藏  举报