pattern

Composite pattern

easy16 2018. 7. 19. 17:19

Composite pattern 


-group 객체를 single 객체와 유사한 방식으로 사용.

-structural pattern의 하나이며, 자기 자신의 객체를 트리 구조로 만들어 사용함.

-자신의 group 객체를 포함하는 class를 만든다.

(Employee의 subordinates)




Employee.java


public class Employee {
    private String name;
    private String dept;
    private int salary;
    private List subordinates;

    public Employee(String name, String dept, int salary){
        this.name=name;
        this.dept=dept;
        this.salary=salary;
        subordinates= new ArrayList<>();
    }

    public void add(Employee e){
        subordinates.add(e);
    }
    public void remove (Employee e){
        subordinates.remove(e);
    }

    public List getSubordinates(){
        return subordinates;
    }

    public String toString(){
        return ( "Emp : name :"+name+" dept : "+dept +" salary : "+salary );
    }
}


구현 및 출력 부분.
	Employee CEO = new Employee("John","CEO", 30000);

	Employee headSales = new Employee("Robert","Head Sales", 20000);

	Employee headMarketing = new Employee("Michel","Head Marketing", 20000);

	Employee clerk1 = new Employee("Laura","Marketing", 10000);
	Employee clerk2 = new Employee("Bob","Marketing", 10000);

	Employee salesExecutive1 = new Employee("Richard","Sales", 10000);
	Employee salesExecutive2 = new Employee("Rob","Sales", 10000);

	CEO.add(headSales);
	CEO.add(headMarketing);

	headSales.add(clerk1);
	headSales.add(clerk2);

	headMarketing.add(salesExecutive1);
	headMarketing.add(salesExecutive2);

	for ( Employee headEmp : CEO.getSubordinates()){

		Log.d (TAG, headEmp.toString());
		for (Employee e : headEmp.getSubordinates()){
			Log.d (TAG, e.toString() );
		}
	}



출처 : 


위의 예제보다는 아래 링크의 예제를 참조하는 것이 더 실용적이다.