form.interface

local form = {_tag = 'form'}
function form.build(tag, super)
--[[
-- form to produce the target with super functional table and integrating multi-interface implement feature
-- produce a target and hold following feature
target:spec(interface) -- integrating the interface feature
target:spec(name, property) -- property holder
target:on(other) -- binding feature to other target and produce a delegater
--]]end function form.on(target, spec)
--[[
-- produce a delegater binding target feature with itself from spec, that the feature defined in spec
--]]end function form.spec(target)
--[[
--attach a form feature to the target --if target builded from `form.build`
function target:spec(interface)
-- specify target reuse interface code
end
--following feature is flexible
function target:spec(prop, target)
-- specify target property initial value and produce getter/setter
-- example
-- target:spec('prop', property)
-- target:prop() return the property
-- target:prop(property) to set the property
-- target:spec('feature', interface)
-- target:spec('feature') return the interface delegater binding on the target
end -- if target is a interface implementation of a certain specification
local spec = target
function spec:on(target)
-- produce the interface delegater binding on the target from spec
end
--]]end

查看实现代码:form.lua

form.test

local form = require('form')
-- 接口定义
local spec = {_tag = 'sepc'}
function spec:Show(msg)
print(self._tag..':Show(msg) not implemented')
end
function spec:Dependence(target)
print(self._tag..':Dependence(target) not implemented')
end
function spec:noImplementation()
print(self._tag..':noImplementation() not implemented')
end
-- 接口实现
local port = form.build('spec', spec)
print('\nport ###test start---------------------------')
port:Show()
port:Dependence()
port:noImplementation()
function port:Show(msg)
print('port:Show(msg)...')
print(msg)
end
print('\noverwrite port:Show(msg)--------------------')
port:Show('port:Show using spec.Show') function port:Dependence(target)
print('port:Dependence(target)...')
target.Show('DI, Dependence Input; implementation binded on '..target._tag..' from port')
end
print('\nport ###test over---------------------------') -- 派生复用
local target
= form.build('target'--[[, port]]) -- 可从#super 派生复用
:spec(port)-- 可指定接口形式复用 print('\ntarget ###test start---------------------------')
target:noImplementation() -- spec:noImplementation()
target:Show('target:Show using port.Show') -- port:Show(msg) print('\nDepend on [port] implement---------------------')
local tar_ = port:on(target)-- binding on target, implementation from port
tar_.Show('tar_.Show()')
print('\ntarget:Dependence(tar_) using port:Show(msg)---')
target:Dependence(tar_) -- port:Dependence(target) print('\noverwrite target:Show(msg)---------------------')
function target:Show(msg)
print('target:Show(msg)...')
print(msg)
end
print('\ntarget:Dependence(tar_) using port:Show(msg)----')
target:Dependence(tar_) print('\nDepend on [target] implement--------------------')
print('\ntarget:Dependence(tar_) using target:Show(msg)--')
tar_ = form.on(target, port)-- using target implementation spec from port
tar_.Show('tar_.Show()')
target:Dependence(tar_)
print('\ntarget ###test over-----------------------------')

form.lua提供友好的lua协约式编程form,完整满足以下两点

  • 派生复用机制
  • 面向接口特性

form.test 运行成功。后续将给出Lua协约式编程范例;基于form.lua实现通知订阅方式

[Lua]表驱动索引编程,form.lua的更多相关文章

  1. [lua]原来这才是表驱动的正确表达方式

    曾经写了个很煞笔的脚本模拟switch..case语法形式.[lua]尝试一种Case语法糖 而今实际项目应用中突发,原来这才是正确的表驱动方式表达.如下所贴: function event_do( ...

  2. <4>Lua表

    lua表 1: lua没有数组,但是表可以代替数组的功能(数组部分与非数组部分); 开始的, 1, 2, 3 ...称连续的索引; b.Lua表的连续索引的长度(数组部分);  #表的名字; --数组 ...

  3. Lua表(table)的用法_个人总结

    Lua表(table)的用法_个人总结 1.表的创建及表的介绍 --table 是lua的一种数据结构用来帮助我们创建不同的数据类型.如:数组和字典--lua table 使用关联型数组,你可以用任意 ...

  4. Lua 学习之基础篇四<Lua table(表)>

    table 是 Lua 的一种数据结构用来帮助我们创建不同的数据类型,如:数组.字典等. Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil. Lua ta ...

  5. LUA表克隆方法归纳

    lua表克隆 将lua一个表, 克隆出一份为一个独立的另外一个表. 对于一个module, 如果在require之后,获得的表对象, 不能直接修改, 例如lua缓存此表, 但是多次逻辑执行, 都使用的 ...

  6. Python编程和 Lua编程的比较

    Python编程和 Lua编程的比较 2016.4.21 定义函数: python: def functionname( parameters ): "函数_文档字符串" func ...

  7. 表驱动方法(Table-Driven Methods)

    表驱动方法(Table-Driven Methods) - winner_0715 - 博客园 https://www.cnblogs.com/winner-0715/p/9382048.html W ...

  8. Lua 学习之基础篇八<Lua 元表(Metatabble)&&继承>

    讲到元表,先看一段table的合并动作. t1 = {1,2} t2 = {3,4} t3 = t1 + t2 attempt to perform arithmetic on a table val ...

  9. Lua 学习之基础篇二<Lua 数据类型以及函数库 汇总>

    引言 前面讲了运算符,这里主要对Lua的数据处理相关的数据类型和函数库进行总结归纳,后面会再接着单独分开讲解具体使用. 首先因为Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值. 值可以存储 ...

随机推荐

  1. .net常見面試題(三)

    1, 请你说说.NET中类和结构的区别? 答:结构和类具有大体的语法,但是结构受到的限制比类要多.结构不能申明有默认的构造函数,为结构的副本是又编译器创建和销毁的,所以不需要默认的构造函数和析构函数. ...

  2. 电源管理之pmu驱动分析

    电源管理芯片可以为多设备供电,且这些设备电压电流有所不同.为这些设备提供的稳压器代码模型即为regulator. 说白了regulator就是稳压器,它提供电源供给.简单的可以gpio操作,高电平开电 ...

  3. iOS按钮长按

    UILongPressGestureRecognizer *longPressGR = [[UILongPressGestureRecognizer alloc] initWithTarget:sel ...

  4. STM32 IAP 在线更新程序 为什么有时行 有时又不行 感觉不可靠 问题解决

    搞了一天才发现 在MDK设置选项中有个"linker"选项卡 , 需要在Project->Options->Linker中将Use Memory Layout from ...

  5. MySQL自定义查询字段排序

    同事在做抽奖排名的时候有个问题 需要按照 一等奖 二等奖 三等奖 未中奖 的形式输出数据 问到我如何排序. 数据库设计如下 用一个prize_code字段标示了是否中奖 1是一等奖 2是二等奖 3是三 ...

  6. GitHub简历

    My GitHub Résumé可以帮你生成一份github简历,你只需要输入你的github用户名.

  7. Jakarta-Commons- BeanUtils学习笔记:

    http://www.cnblogs.com/zhangyi85/archive/2009/04/22/1441341.html 1.什么是BeanUtils: BeanUtils主要提供了对于Jav ...

  8. 【转】java 解析 plist文件

    为了方便的将spritesheet的图导入我自己的动画编辑器!我做了plist文件解析DOM解析比较麻烦 因为element getChildNodes 会获取到text对象.而这个对象可能是一个空白 ...

  9. JSP&Servlet学习手册

    JSP&Servlet学习手册 沙琪玛 书 目录 JSP 指令... 3 书写方式... 3 指令列表... 3 JSP 内置对象... 3 内置对象特点... 3 常用内置对象... 3 o ...

  10. iOS swift使用xib绘制UIView

    目标:用xib绘制一个UIView,在某个ViewController中调用. 三个文件:ViewController.Swift    DemoView.swift     DemoView.xib ...