概念理解
組合模式用來表示整體和部分的結(jié)構(gòu)君仆,是一種結(jié)構(gòu)型模式。對于客戶端而言牲距,整體和部分開放的是同一個接口返咱,調(diào)用起來并沒有不同。換種說法牍鞠,一個對象和一組對象對于客戶端而言咖摹,使用方式是一致的。
實例說明
組合模式的典型表示方式是樹形結(jié)構(gòu)难述,實例有很多萤晴,比如文件系統(tǒng),網(wǎng)站菜單胁后,公司和部門之間的關(guān)系店读,員工領(lǐng)導(dǎo)和下屬的關(guān)系。現(xiàn)在考慮員工和下屬的關(guān)系攀芯,實現(xiàn)起來非常簡單:不管是領(lǐng)導(dǎo)還是員工屯断,都使用同一個類雇員,雇員中有名字侣诺,薪水殖演,部門,和管理的下屬員工年鸳。底層員工的下屬員工列表為空剃氧,并不影響調(diào)用。
public class Employee {
private String name;
private String dept;
private int salary;
private List<Employee> subordinate;
public Employee(String name, String dept, int salary) {
this.name = name;
this.dept = dept;
this.salary = salary;
subordinate = new ArrayList<Employee>();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public List<Employee> getSubordinate() {
return subordinate;
}
public void setSubordinate(List<Employee> subordinate) {
this.subordinate = subordinate;
}
public void addEmployee(Employee e) {
this.subordinate.add(e);
}
@Override
public String toString() {
return "name=" + name + ",dept=" + dept + ",salary=" + salary;
}
}
public class App {
public static void main(String[] args) {
Employee chief = initEmployee();
printEmployee(chief);
}
public static void printEmployee(Employee e){
System.out.println(e.toString());
List<Employee> subordinates = e.getSubordinate();
for(int i =0;i<subordinates.size();i++){
printEmployee(subordinates.get(i));
}
}
public static Employee initEmployee() {
Employee chief = new Employee("SAM", "Finance", 10000);
Employee leader = new Employee("tom", "Finance", 7000);
Employee amy = new Employee("amy", "Finance", 4000);
Employee sary = new Employee("sary", "Finance", 4000);
chief.addEmployee(leader);
chief.addEmployee(sary);
leader.addEmployee(amy);
return chief;
}
}
代碼實例參見:https://github.com/jxl198/designPattern/tree/master/composite