传入参数和回调取值

例如类A调用类B。

A有属性a,B也需要用到。

因为B需要多次使用a,每次使用参数传递,会很麻烦。

此时一种方法是A通过一个方法把a传给B,例如B.setValue(a),其中B.b = a。

此时的问题是a和b的值是一样的,有冗余;而且可能A修改了a,但忘了通知b;或者其他类调用了B.setValue修改了b,但a并没有改变。另一个问题是如果先执行了具体操作,之前并没有setValue,那行为就是错误的。

另一种方法是A提供一个方法getValue。然后把A传给B(更好的方法是一个由A实现的只包含getValue的接口传给B),然后B可以调用A.getValue(或更好的Interface.getValue)来获取。好处是只有一份变量,坏处是增加了B对A(或者是A实现的接口)的依赖。

对于前者的一个改进是把这些设置放在构造函数中。如果无法在构造函数中设置,那也应该在有明确含义的初始化函数,类似initialize,activate中设置。这样子调用者A会记住调用,而且其他类也不太容易误调用。特别是有多个这样的属性,可以放在同一个方法中设置,免得多个方法设置导致漏调。

一个判断原则是a是否也是B的一个属性。如果是的话,那在其中定义是好的;如果不是的话,那么从A中获取是恰当的。

传入参数和回调取值

时间: 2024-11-07 21:47:45

传入参数和回调取值的相关文章

OC中传入参数,返回多值(一)

看看先: // 日期格式化对象 NSDateFormatter *fmt = [[NSDateFormatter alloc] init]; // 设置日期格式 fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss"; // 2个日期对象 NSDate *date1 = [fmt dateFromString:@"1970-01-01 00:00:01"]; NSDate *date2 = [fmt dateFromString:@"

[python]关于函数传入参数

在传入参数时有两个特殊参数,*args,**kwargs,功能如下: def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs print '---------------------------------------' if __name__ == '__main__': foo(1,2,3,4) foo(a=1,b=2,c=3) foo(1,2,3,4, a=1,b=2,c=3) foo('a', 1

工作随笔——Java调用Groovy类的方法、传递参数和获取返回值

接触Groovy也快一年了,一直在尝试怎么将Groovy引用到日常工作中来.最近在做一个功能的时候,花了点时间重新看了下Java怎么调用Groovy的方法.传递参数和获取返回值. 示例Groovy代码如下: # TestGroovy.groovy 定义testC方法,传入3个参数,返回处理后的数据 def testC(int numA, int numB, int numC) { "传入参数:" + numA + numB + numC + "计算之和为:" + (

web接入层 传入参数的格式化及web返回值传出数据的参数格式化,都要统一

1.web接入层 传入参数的格式化及web返回值传出数据的参数格式化,都要统一. 比如acSpace中, 传入层参数@RequestBody javaBean对象.统一转换为javabean传入参数. 返回值,统一返回ResultObject对象,resultObject实现了序列化.且resultObject中定义好了传输回去哪些属性, 3.ResultObject,定义的公共传出参数属性 public class ResultObject implements Serializable {

引用参数与引用返回值 类的拷贝构造

引用地址  http://www.cnblogs.com/bigshow/archive/2008/11/10/1330514.html 经常看到这样的声明:T& func(T& t),这种声明和T func(T t)有什么区别?书上的解释是为了提高效率,究竟是如何提高效率的呢?内部执行了什么操作?本文通过8个小例子对引用参数和引用返回进行了一次彻底的排查.    首先看一下在类的成员函数中的引用参数和引用返回值: 类定义class A{     public:      int x; A

三、MyBatis系列:Mapper 映射 之 使用POJO实体来接收数据和传入参数

1.首先定义一个接收数据的实体 User 类型,还有一个输入参数的 UserQuery 类型. 1 public class User { 2 public int id; 3 public String username; 4 public Date birthday; 5 public String sex; 6 public String address; 7 } 8 public class UserQuery { 9 private String orderByClause; 10 p

Mybatis传入参数为map

Mapper: List<AdPayConfigEntity> selectByAdType(@Param("status") Integer... status); XML:<select id="selectByAdType" parameterType="map" resultMap="BaseResultMap"> SELECT * from sky_ad_pay_config WHERE ad

MyBatis传入参数为集合 list 数组 map写法

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有item,index,collection,open,separator,close.item表示集合中每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性

MyBatis传入参数为集合、数组SQL写法

参考:http://blog.csdn.net/small____fish/article/details/8029030 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach标签的属性主要有item,index,collection,open,separator,close. item 表示集合中每一个元素进行迭代时的别名,随便起的变量名: index 指定一个名字,用于表示在迭代过程中,每次迭代到的位置,不常用: open 表示该语句以什么开始,常用"