Chapter 16_5 单一方法

  当一个对象只有一个方法时,可以不用创建接口table,但是要将这个单独的方法作为对象来返回。可以参考迭代器那一节,是如何构造一个迭代器函数,那个函数将状态保存为closure。

  一个具有状态的迭代器是一个单一方法对象。

  单一方法对象还有一种情况,若这个方法是一个调度(dispatch)方法,它根据某个参数来完成不同的操作:

function newObject(value)        --value is upvalue
    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

每个对象都用一个closure,这比都用一个table更高效。虽然无法实现继承,却拥有了完全的私密控制。

访问一个对象状态只有一个方式,那就是通过它的单一方法。

以上内容来自:《Lua程序设计第二版》和《Programming in Lua  third edition 》

时间: 2024-10-21 07:27:00

Chapter 16_5 单一方法的相关文章

Chapter 8 工厂方法模式

工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行.你想要加功能,本来是改工厂类的,而现在是修改客户端. 代码如下: package xiao; class LeiFeng{ public void sweep(){ System.out.println("sweep!"); } public void wash(){ System.out.println("wash!&q

Chapter 10 模版方法模式

我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模版模式来处理. 模版方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.模版方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模版方法通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势,相当于提供了一个很好的代码复用平台. 当不变和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现.我们通过模版方法模式把这些行为搬移

PHP——修改数据库2-加提示框,加简单的登录页面(单一方法)

登录页面:0127lianxi.php <body> <h1>登陆</h1> <form action="0127lianxi.php" method="post"> <div> <span>用户名:</span><input type="text" name="uid" /></div> <div> <

TestNg依赖配置基础用法(单一方法依赖)------TestNg依赖详解(一)

TestNg依赖测试之简单方法依赖,通过dependsOnMethods属性来配置依赖方法 原创文章,版权所有,允许转载,标明出处:http://blog.csdn.net/wanghantong Javacode: [java] view plain copy /** * * <p> * Title: TestngDependencies * </p> * * <p> * Description: Testng提供了两种依赖实现 * * 1.强制依赖:某个测试用例之前

TestNg依赖详解(一)------简单的依赖(单一方法依赖)

TestNg依赖测试之简单方法依赖,通过dependsOnMethods属性来配置依赖方法 Java code: /** * * <p> * Title: TestngDependencies * </p> * * <p> * Description: Testng提供了两种依赖实现 * * 1.强制依赖:某个测试用例之前需要执行的依赖链中如果有一个失败,那么接下来所有的测试都不会被执行 * 2.顺序依赖(软依赖):顺序依赖的用处更多是用来检测一个测试链是否按照正确的顺

Chapter 3.单一职责原则

单一职责原则:就一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力. 如果你能够想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责,就应该考虑类的职责分离.

单一指责原则

using System; using System.Collections.Generic; using System.Text; namespace SingleResponsibilityPrinciple { //单一指责原则(Single Responsibility Principle) SRP //There should never be more than one reason for a class to change. //有且只有一个原因引起类的变更. class Pro

.net(C#)操作文件的几种方法汇总

.net(C#)操作文件的几种方法汇总 System.IO命名空间下类的用法:在System.IO名称空间中包含了用于文件输入输出的主要类.File:实用类,提供许多静态方法,用于移动.复制和删除文件.Directory:实用类,提供许多静态方法,用于移动.复制和删除目录.Path:实用类,用于处理路径名称.FileInfo:表示磁盘上的物理文件,具有可以处理此文件的方法.要完成对文件的读取和写入工作,就必须创建Stream对象.DirectoryInfo:表示磁盘上的物理目录,具有可以处理此目

编码最佳实践——单一职责原则

SOLID是一组最佳编码实践的首字母缩写 S 单一职责原则 O 开放与封闭原则 L Liskov(里式)替换原则 I 接口分离原则 D 依赖注入原则 同时应用这些最佳实践,可以提升代码适应变更的能力.但是凡事要有度,过度使用虽然可以让代码有很高的自适应能力,但是会导致层次粒度过小而难以理解或使用,还会影响代码的可读性. 单一职责原则 单一职责原则(Single Responsibility principle)要求开发人员编写的代码有且只有一个变更理由.如果一个类有多个变更理由,那么它就具有多个