一铃芦、簡介
把一組相似的對象當作一個單一的對象美澳,為的是減少數(shù)據(jù)類型
奢人。
1蓬戚、定義一個抽象對象饺著,它可以表示兩種或多種實際類型的對象
2亚隙、在對象內部磁餐,聚合一個抽象類型對象
3、構造時阿弃,遞歸這種聯(lián)系
4诊霹、適合構造樹形結構的對象關系
二、代碼
代碼中一般沒有特殊情況渣淳,用一個葉子節(jié)點就可以了脾还。
- 抽象基類
public abstract class Node {
private String name;
public Node(String name){
this.name = name;
}
public abstract List<Node> getChildren();
public String getName() {
return name;
}
}
- 尾節(jié)點
public class LeafNode extends Node{
public LeafNode(String name) {
super(name);
}
@Override
public List<Node> getChildren() {
return null;
}
}
- 中間節(jié)點
public class DistrictNode extends Node{
private List<Node> children = new ArrayList<>();
public DistrictNode(String name) {
super(name);
}
@Override
public List<Node> getChildren() {
return children;
}
public void addChild(Node node){
children.add(node);
}
public void delChild(int i){
children.remove(i);
}
}
- 測試
public class CompositeClient {
public static void main(String[] args){
sendFruit();
}
public static void sendFruit(){
//根目錄
DistrictNode root = new DistrictNode("根");
//一線目錄
root.addChild(new DistrictNode("上海"));
root.addChild(new DistrictNode("天津"));
DistrictNode districtNode = new DistrictNode("北京");
root.addChild(districtNode);
//二級目錄
districtNode.addChild(new DistrictNode("海淀區(qū)"));
districtNode.addChild(new DistrictNode("西城區(qū)"));
DistrictNode districtNode2 = new DistrictNode("朝陽區(qū)");
districtNode.addChild(districtNode2);
//三級目錄
districtNode2.addChild(new LeafNode("三里屯"));
districtNode2.addChild(new LeafNode("朝陽外街"));
System.out.println(JSON.toJSON(root));
//以下物流運輸業(yè)務。入愧。鄙漏。嗤谚。
}
}