8.2 replace datavalue with object(데이터 값 대신 대상)

1664 단어
너는 데이터 항목이 하나 있는데, 다른 데이터와 행위와 함께 사용해야 의미가 있다.
데이터 항목을 대상으로 변경합니다.
동기:
개발 초기에는 흔히 간단한 데이터 항목으로 간단한 상황을 표시하기로 결정했다.그러나 개발이 진행됨에 따라 이런 간단한 데이터 항목은 더 이상 간단하지 않다는 것을 발견할 수 있을 것이다.
방법:
대체 수치를 위한 클래스를 새로 만듭니다.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);
}

좋은 웹페이지 즐겨찾기