將物件當作一個元件,將很多元件組合成樹狀結構,有人也稱為部分整理模式(part-whole pattern)。
組合模式定義
單個物件與組合的物件都有一致性
組合模式使用情況
- 有物件需要表達複數的狀況
組合模式UML圖
組合模式範例
我們建立員工資料,利用組合模式建立多筆的員工資料
/**
* name: Employee.java
* description : 員工個人資料
* Created by bryant on 2017/1/25.
*/
public class Employee {
public Employee(String name, String dept, BigDecimal salary){
this.name = name ;
this.dept = dept ;
this.salary = salary;
}
private String no;
//員工姓名
private String name ;
//薪水
private BigDecimal salary ;
//部門
private String dept ;
//取得員工姓名
public String getName() {
return name;
}
//設定員工姓名
public void setName(String name) {
this.name = name;
}
//取得員工薪水
public BigDecimal getSalary() {
return salary;
}
//設定員工薪水
public void setSalary(BigDecimal salary) {
this.salary = salary;
}
//取得部門
public String getDept() {
return dept;
}
//設定部門
public void setDept(String dept) {
this.dept = dept;
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
@Override
public int hashCode() {
return Integer.valueOf(this.no);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder() ;
sb.append("") ;
sb.append(""+no+"") ;
sb.append(""+name+"") ;
sb.append(""+dept+"") ;
sb.append(""+salary+"") ;
sb.append(""+"\r\n") ;
return sb.toString();
}
}
/**
* name: EmployeeComposite.java
* description : 員工集合
* Created by bryant on 2017/1/25.
*/
public class EmployeeComposite {
private List list = new ArrayList() ;
public List getEmployees(){
return list;
}
public void addEmployee(Employee employee){
list.add(employee);
}
public void remove(Employee employee){
list.remove(employee);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder() ;
for (Employee e: list){
sb.append(e.toString());
}
return sb.toString() ;
}
}
/**
* name: EmployeeCompositeDemo.java
* description : 員工集合DEMO
* Created by bryant on 2017/1/25.
*/
public class EmployeeCompositeDemo {
public static void main(String[] args){
Employee worker01 = new Employee("Jacker", "Worker",new BigDecimal("31000")) ;
Employee worker02= new Employee("Mary", "Worker",new BigDecimal("31000")) ;
Employee manager = new Employee("Bob","Manager", new BigDecimal("51000")) ;
EmployeeComposite employeeComposite = new EmployeeComposite() ;
employeeComposite.addEmployee(worker01);
employeeComposite.addEmployee(worker02);
employeeComposite.addEmployee(manager);
System.out.println(employeeComposite.toString());
}
}


留言
張貼留言