Privacy
单方法
一. Privacy
- 首先,该函数创建一个表以保留内部对象的状态并将其存储在局部变量中self。然后,该函数为对象的每个方法创建闭包(即嵌套函数的实例)
- 最后,该函数创建并返回外部对象,该外部对象将方法名称映射到实际的方法实现。
function newAccount ()
--保存对象状态的table保存在闭包环境下
local self = {balance = initialBalance}
local withdraw = function (v)
self.balance = self.balance - v
end
local deposit = function (v)
self.balance = self.balance + v
end
local getBalance = function () return self.balance end
return {
withdraw = withdraw,
deposit = deposit,
getBalance = getBalance
}
end
acc1 = newAccount(100.00)
acc1.withdraw(40.00)
print(acc1.getBalance()) --> 60
一. 单方法(The Single-Method Approach)
- 适用于当对象只有一个方法时使用
- 使用闭包,性能比table更好
- 同样实现了Privacy功能
function newObject (value)
return function (action, v)
if action == "get" then return value
elseif action == "set" then value = v
else error("invalid action")
end
end
end
d = newObject(0)
print(d("get")) --> 0
d("set", 10)
print(d("get")) --> 10