单方法对象(Single-method Object)

简介: 单方法对象(Single-method Object)

面向对象编程的一个特例对象只有一个方法,在这种情况下,可以不用创建接口表,只要将这个单独的方法以对象的表示形式返回即可。如果感到有点奇怪,那么应该回忆一下诸如 io.linesstring.gmatch 这样的迭代器。一个在内部保存了状态的迭代器就是一个单方法对象


单方法对象的另一种有趣情况是,这个方法其实是一个根据不同的参数完成不同任务的分发方法。这种对象的一种原型实现如下:

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("set"))   --> 10


这种非传统的对象实现方式是很高效的。虽然 d("set",10) 这样的语法有些奇怪,但也不过是比传统的 d:set(10) 多出了两个字符而已。每个对象使用一个闭包,要比使用一个表的开销更低。虽然使用这种方式不能实现继承,但我们可以拥有完全的私有性:访问单方法对象中某个成员只能通过该对象具有的唯一方法进行。

目录
相关文章
|
1月前
|
JavaScript
js 字符串String转对象Object
该代码示例展示了如何将一个以逗号分隔的字符串(`'1.2,2,3,4,5'`)转换为对象数组。通过使用`split(',')`分割字符串并`map(parseFloat)`处理每个元素,将字符串转换成浮点数数组,最终得到一个对象数组,其类型为`object`。
|
2月前
|
存储 设计模式 Python
Python中的类(Class)和对象(Object)
Python中的类(Class)和对象(Object)
32 0
|
2月前
|
存储 JavaScript
JS中Map对象与object的区别
JS中Map对象与object的区别
|
3月前
|
Java 流计算
在Flink实时任务中,POJO(Plain Old Java Object)对象的模式演进可能会引起不兼容的问题
【2月更文挑战第6天】在Flink实时任务中,POJO(Plain Old Java Object)对象的模式演进可能会引起不兼容的问题
22 3
|
4月前
|
JavaScript 前端开发 测试技术
Proxy vs Object.defineProperty:哪种对象拦截机制更适合你?
Proxy vs Object.defineProperty:哪种对象拦截机制更适合你?
|
4月前
|
存储 JavaScript 前端开发
【JavaScript】<面向对象Object>函数方法&对象创建&原型对象&作用域解析
【1月更文挑战第17天】【JavaScript】<面向对象Object>函数方法&对象创建&原型对象&作用域解析
|
4月前
|
JavaScript 前端开发
如何巧妙使用`Object.keys`方法将`JS`的一个对象的特定的值赋值给另外一个对象
如何巧妙使用`Object.keys`方法将`JS`的一个对象的特定的值赋值给另外一个对象
18 0
|
5月前
|
Docker Python 容器
generator object APIClient read from socket locals对象操作
generator object APIClient read from socket locals对象操作
25 1
|
6月前
|
网络协议 流计算 Windows
2.5 Windows驱动开发:DRIVER_OBJECT对象结构
在Windows内核中,每个设备驱动程序都需要一个`DRIVER_OBJECT`对象,该对象由系统创建并传递给驱动程序的`DriverEntry`函数。驱动程序使用此对象来注册与设备对象和其他系统对象的交互,并在操作系统需要与驱动程序进行交互时使用此对象。`DRIVER_OBJECT`对象还包含了与驱动程序所管理的设备对象相关联的设备扩展结构,以及用于处理`I/O`请求的函数指针等信息。它是驱动程序与操作系统内核之间的桥梁,用于协调设备的操作和管理。
47 0
2.5 Windows驱动开发:DRIVER_OBJECT对象结构
|
6月前
|
fastjson
Map对象与实体类Object对象转换
Map对象与实体类Object对象转换