E D R , A S I H C RSS

Delegation Pattern

������ ������하�� �� ������ 하������. 하���� �������� 하���� (Delegation) ����. ���� �������� ��������킬 �� ���� ������ ����.

��한, 클���� 하�� ������, ����하�� �� 클������ ���� 클���������� �� �� Refactoring �� ������ ����.

ObjectOrientedProgramming �� �� ������ ���� ���. �� �������� ���������� �� �� ������.

example) ���� VonNeumannAirport JuNe 1002 Pair 하���� JuNe �� ���� Refactoring ���� Delegation.
~cpp 
public class Airport {
	private int _traffic;
	private int [] _arrivalGate;
	private int [] _departureGate;
	private PassengerSet psg;
		
	public int getTraffic() {
		ListIterator iter = psg.passengers.listIterator();
		int [] passenger;
		
		while (iter.hasNext()) {
			passenger = (int [])iter.next();
			movePassenger(passenger[0], 
						passenger[1],
						passenger[2]);
		}
		
		return _traffic;
	}	
	
	public void setArrivalGates(int [] aCity) {
		_arrivalGate = aCity;
	}
	public void setDepartureGates(int [] aCity) {
		_departureGate = aCity;
	}
	
	public int [] getArrivalGates() {
		return _arrivalGate;
	}
	
	public int [] getDepartureGates() {
		return _departureGate;
	}
	public int getDistance(int fromCity, int toCity){
		int distance=java.lang.Math.abs(_getArrivalCityGate(fromCity)
		                             -_getDepartureCityGate(toCity))+1;
		return distance;
	}	

	private void movePassenger(int fromCity, int toCity, int aNumber) {
		_traffic+=getDistance(fromCity,toCity)*aNumber;
	}
	public void setPassengers(PassengerSet psg) {
		this.psg=psg;
	}
}
������ Airport ����. 하�� VonNeumannAirport ������ ��, ���� Input �� � Configuration ���� Set �� ������.

�� ���� ���� �� Airport Code Refactoring 하���� 했��. �� 해 Airport �� ������ Configuration ���� ������ 해 Configuration Extract 하��, �������� Delegation 함�������� ������ ������ �� ����. (Test Code ���� Guard ��할����)

~cpp 
import java.util.ListIterator;

class Configuration {
	private int [] _arrivalGate;
	private int [] _departureGate;
	private int id;
	
	public void setArrivalGates(int [] aCity) {
		_arrivalGate=aCity;
	}
	public void setDepartureGates(int [] aCity) {
		_departureGate=aCity;	
	}
	
	public int [] getArrivalGates() {
		return _arrivalGate;
	}
	
	public int [] getDepartureGates() {
		return _departureGate;	
	}
	public int getDistance(int fromCity, int toCity){
		int distance=java.lang.Math.abs(_getArrivalCityGate(fromCity)
		                             -_getDepartureCityGate(toCity))+1;
		return distance;
	}	
	public int _findInIntArray(int anInt,int [] anArray) {
		for (int i=0;i<anArray.length;i++) {
			if (anArray[i] == anInt) return i+1;
		}
		return -1;
	}
			
	public int _getArrivalCityGate(int aCity) {
		return _findInIntArray(aCity,getArrivalGates());
	}
	
	public int _getDepartureCityGate(int aCity) {
		return _findInIntArray(aCity,getDepartureGates());
	}
	
	public int getId() {
		return id;
	}
	
	public void setId(int anId) {
		id=anId;
	}
	
}

public class Airport {
	private int _traffic;
	private int [] _arrivalGate;
	private int [] _departureGate;
	private PassengerSet psg;
	private Configuration conf=new Configuration();
		
	public int getTraffic() {
		ListIterator iter = psg.passengers.listIterator();
		int [] passenger;
		
		while (iter.hasNext()) {
			passenger = (int [])iter.next();
			movePassenger(passenger[0], 
						passenger[1],
						passenger[2]);
		}
		
		return _traffic;
	}	
	
	public void setArrivalGates(int [] aCity) {
		conf.setArrivalGates(aCity);
	}
	public void setDepartureGates(int [] aCity) {
		conf.setDepartureGates(aCity);
	}
	
	public int [] getArrivalGates() {
		return conf.getArrivalGates();
	}
	
	public int [] getDepartureGates() {
		return conf.getDepartureGates();
	}
	public int getDistance(int fromCity, int toCity){
		return conf.getDistance(fromCity,toCity);
	}	

	private void movePassenger(int fromCity, int toCity, int aNumber) {
		_traffic+=getDistance(fromCity,toCity)*aNumber;
	}
	public void setPassengers(PassengerSet psg) {
		this.psg=psg;
	}
}


DelegationPattern �� �� ����한 ��, DelegationPattern ����하�� 클������ 클����트�� �� 클���� Delegation ���� ������ ������ ������. ��, �������� ���� DelegationPattern�� ������ 클������ ���� 클���� ���� �������� ������������. ���������� ������ ���� �� 학�� �� �������� �� ���� ����해������.

ResponsibilityDrivenDesign , Refactoring, DelegationPattern ���� �� ���� ���� �� ����. (DesignPattern �� ��������)


�� SE �������� ��포�트������ ��� ����하���� '�������� �������� ������ ������' ����������, �� �� �� 하������ Delegation �� ������ ������ ��������. Delegation �� �� ��해해 ��포�트 ����� ����화 ��������� �� 행할 �� ����, ������ �� ������ �� ������ �� ����.. --1002

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:06
Processing time 0.0145 sec