10.9introduce parameter object
来源:互联网 发布:永宏plc编程软件 编辑:程序博客网 时间:2024/06/15 20:18
某些参数总是很自然地同时出现。
以一个对象取代这些参数。
动机:
常会看到特定的一组参数总是一起被传递。可能有好几个函数都使用这一组参数,这些函数可能隶属同一个类,也可能隶属不同的类。这就是data clumps(数据泥团),可以运用一个对象包装所有这些数据,再以该对象取代它们。
做法:
新建一个类,用以表现你想替换的一组参数。将这个类设为不可变的。
针对使用该组参数的所有函数,实施add parameter,传入上述新建类的实例对象,并将此参数值设为null。
=》如果你所修改的函数被其他很多函数调用,那么可以保留修改前的旧函数,并令它调用修改后的新函数。你可以先对旧函数进行重构,然后逐一修改调用端使其调用新函数,最后再将旧函数删除。
对于data clumps中的每一项,从函数签名中移除之,并修改调用端和函数本体,令它们都改而通过新的参数对象取得该值。
每去除一个参数,编译并测试。
将原先的参数全部去除之后,观察有无适当函数可以运用move method搬移到参数对象之中。
=》被搬移的可能是整个函数,也可能是函数中的一个段落。如果是后者,首先使用extract method将该段落提炼为一个独立函数,再搬移这一新建函数。
范例:
旧代码
class Entry... Entry(double value, Date chargeDate) { _value = value; _chargeDate = chargeDate; } Date getDate(){ return _chargeDate; } double getValue{ return _value; } private Date _chargeDate; private double _value;class Account... double getFlowBetween(Date start, Date end){ double result = 0; Enumeration e = _entries.elements(); while(e.hasMoreElements()){ Entry each = (Entry)e.nextElement(); if(each.getDate().equals(start) || each.getDate().equals(end) || (each.getDate().after(start) && each.getDate().before(end))) { result += each.getValue; } } return result; } private Vector_entries = new Vector();client code...double flow = anAccount.getFlowBetween(startDate, endDate);
新代码
class DateRange{ DateRange(Date start, Date end){ _start = start; _end = end; } Date getStart(){ return _start; } Date getEnd(){ return _end; } boolean includes(Date arg){ return (arg.equals(_start)||arg.equals(_end)||(args.after(_start) && arg.before(_end))); } private final Date _start; private final Date _end;}class Account... double getFlowBetween(DateRange range){ double result = 0; enumeration e = _entries.elements(); while(e.hasMoreElements()){ Entry each = (Entry) e.nextElement(); if(range.includes(each.getDate())){ result += each.getValue(); } } return result; }
- 10.9introduce parameter object
- Introduce Parameter Object(引入参数对象)
- 简化函数调用之九 :Introduce Parameter Object(引入参数对象)
- Introduce Null Object(引入Null对象)
- 9.7 introduce Null object (引入null对象)
- introduce
- Introduce
- introduce
- c++ object parameter and return
- Object-c:@property 参数说明 (property parameter)
- 简化条件表达式之七 :Introduce Null Object(引入Null 对象)
- C# Parameter: Pass object by value, The copy constructor
- Warning: mysql_query() expects parameter 2 tobe resource, object given i
- Must explicitly describe intended ownership of an object array parameter
- Error selecting key or setting result to parameter object. Cause
- Must explicitly describe intended ownership of an object array parameter
- Parameter
- SpringFrameWork Introduce
- maven中pom.xml中dependencies元素介绍
- GridView选中变色,经过变色,整栏点击弹出网页
- Android 知识点备忘
- MYSQL修改密码的几种方式
- ant配置文件详解(转)
- 10.9introduce parameter object
- 如何管理好自己的时间
- char *c和char c[]区别
- directshow 不注册使用filter
- Linux 平台 Oracle 单实例 从10.2.0.1 升级到10.2.0.5.4 步骤
- Oracle10g OracleDBConsole[SID]服务无法启动
- PHP实现经纬度计算距离
- MSSQL Server中通过查看SQL语句执行所用的时间
- 使用Makefile编译驻留程序配置