8.2 replace data value with object(以对象取代数据值)

原创 2011年10月17日 09:27:26

你有一个数据项,需要与其他数据和行为一起使用才有意义。

将数据项变为对象。

动机:

开发初期,往往决定以简单的数据项表示简单的情况。但是,随着开发的进行,可能会发现,这些简单数据项不再那么简单了。

做法:

为待替换数值新建一个类,在其中声明一个final字段,其类型和源类中的待替换数值类型一样。然后在新类中加入这个字段的取值函数,再加上一个接受此字段为参数的构造函数。

将源类中的待替换数值字段的类型改为前面新建的类。

修改源类中该字段的取值函数,令它调用新类的取值函数。

如果源类构造函数中用到这个待替换字段,我们就修改构造函数,令它改用新类的构造函数来对字段进行赋值动作。

修改源类中待替换字段的设值函数,令它为新类创建一个实例。

现在,你有可能需要对新类使用change value to reference。


旧代码

class Order...
public Order(String customer){
    _customer = customer;
}
public String getCustomer(){
    return _customer;
}
public void setCustomer(String arg){
    _customer = arg;
}
private String _customer;
private static int numberOfOrdersFor(Collection orders, String customer){
    int result = 0;
    Iterator iter = orders.iterator();
    while(iter.hashNext()){
        Order each = (Order) iter.next();
        if(each.getCustomer().equals(customer)) result++;
    }
    return result;
}



新代码

class Customer{
    public Customer(String name){
        _name = name;
    }
    public String getName(){
        return _name;
    }
    private final String _name;
}

class Order...
public Order(String customerName){
    _customer = new Customer(customerName);
}
public string getCustomerName(){
    return _customer.getName();
}
private Customer _customer;
public void setCustomer(String customerName){
    _customer = new Customer(customerName);
}







EJB商业探讨的白皮书

1 业界支持  任何一个商业化的技术要想拥有良好的市场态势,业界内重要企业的大量参与是十分重要的。J2EE是由SUN引导,各厂商共同发起的,并得到广泛认可的工业标准。业内企业计算领域的大企业如:IBM...
  • DrunkenLion
  • DrunkenLion
  • 2001-06-20 08:49:00
  • 662

重新组织数据之二 :Replace Data Value with Object(以对象取代数据值)

你有一笔数据项(data item),需要额外的数据和行为。 将这笔数据项变成一个对象。 动机(Motivation) 开发初期,你往往决定以简单的数据项(data ite...
  • yuwei629
  • yuwei629
  • 2013-05-06 17:10:39
  • 452

Replace Data Value with Object(以对象取代数据值)

你有一笔数据项(data item),需要额外的数据和行为。 将这笔数据项变成一个对象。 class Order... private string customer;==>class Order.....
  • bendan999999999
  • bendan999999999
  • 2009-01-15 09:09:00
  • 740

重新组织数据之五 :Replace Array with Object(以对象取代数组)

你有一个数组(array),其中的元素各自代表不同的东西。 以对象替换数组。对于数组中的每个元素,以一个值域表示之。 String[] row = new String[3];   r...
  • yuwei629
  • yuwei629
  • 2013-05-06 17:33:36
  • 561

java重构学习7:以函数对象取代函数(Replace Method with Method Object)

本系列来自《java 重构改善既有代码的设计》一书 当对局部变量的引用无法使用Extract Method的时候,可以考虑将这个函数放入到一个单独的对象中去,如此一来,局部变量就变成了对象的字段,然...
  • xuzengqiang2
  • xuzengqiang2
  • 2014-12-18 15:54:55
  • 513

ReplaceTypeCodeWithClass(以类取代类型码)

#ifndef REPLACETYPECODEWITHCLASS_H_ #define REPLACETYPECODEWITHCLASS_H_ #include enum BloodType { ...
  • Tony_Wong
  • Tony_Wong
  • 2014-06-28 16:26:21
  • 370

重构之2.Replace Type Code with Class(以类取代类型码)

场景 在一个类中我们经常会下定义一些类型码,如: public static final int INVALID=0; public static final int VALID=...
  • wobendiankun
  • wobendiankun
  • 2014-09-10 23:13:08
  • 911

重构之3.Replace Type Code with Subclasses(以子类取代类型码)

场景: 通常我们会在业务层判断类型码,执行不同的方法,可以使用子类来取代类型码 前提: 1.类型码不会被改变 2.类型码所属的类没有子类 修改前: Stud...
  • wobendiankun
  • wobendiankun
  • 2014-09-11 22:26:38
  • 899

Introduce Parameter Object(引入参数对象)

1.形式 某些参数总是很自然地同时出现。以一个对象取代这些参数。 2.动机 你常会看到特定的一组参数总是一起被传递。可能有好几个函数都是用这一组参数,这些函数可能隶属同一个类,也可以隶属不同的类。这样...
  • sinat_25682007
  • sinat_25682007
  • 2017-05-23 09:13:56
  • 209

重构之4.Replace Type Code with State/Strategy(以State/Strategy取代类型码)

场景: 你有一个类型码,它会影响类的行为,但你无法通过继承手法来消除它 ,可以使用状态对象取代类型码 类图: 修改前: Student /** * @f...
  • wobendiankun
  • wobendiankun
  • 2014-09-13 09:23:28
  • 1098
收藏助手
不良信息举报
您举报文章:8.2 replace data value with object(以对象取代数据值)
举报原因:
原因补充:

(最多只允许输入30个字)