组合模式—商品类别树的构建"/>
组合模式—商品类别树的构建
组合模式:将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有统一性。
通俗讲就拿一棵树来说,从树根向上生长,可以将树的结点分为两种,一种是叶子结点,叶子节点下面不可再分,另一种是树杈或者树枝,这种结点可以再往下分为叶子结点。这两种结点的性质不同,也就是属性不一样,在进行操作时也会不一样,而组合模式是将操作对这两种不同的结点具有一致性。这只一个不恰当的比喻。
书中的分公司和部门之间的关系更加形象。
下面写另外一个例子:
用组合模式重新实现商品类别树的构建(代
码+UML类图)
+服装
+男装
-衬衣
-夹克
+女装
-裙子
-套装
package 构建商品类别树;public abstract class Component {protected String name;public Component(String name) {super();this.name = name;}public abstract void Add(Component c);public abstract void Remove(Component c);public abstract void Display(String preStr);}package 构建商品类别树;public class Leaf extends Component {public Leaf(String name) {super(name);// TODO Auto-generated constructor stub}@Overridepublic void Add(Component c) {System.out.println("Cannot add to a leaf");// TODO Auto-generated method stub}@Overridepublic void Remove(Component c) {System.out.println("Cannot remove from a leaf");// TODO Auto-generated method stub}@Overridepublic void Display(String preStr) {System.out.println(preStr+"-"+name);// TODO Auto-generated method stub}}package 构建商品类别树;import java.util.ArrayList;
import java.util.Collection;public class Composite extends Component {//private List<Component> children=new List<Component>();private Collection<Component> children=new ArrayList<Component>();public Composite(String name) {super(name);// TODO Auto-generated constructor stub}@Overridepublic void Add(Component c) {children.add(c);// TODO Auto-generated method stub}@Overridepublic void Remove(Component c) {// TODO Auto-generated method stub}@Overridepublic void Display(String preStr) {System.out.println(preStr+"+"+this.name);preStr+="";for(Component component:children) {component.Display(preStr);}// TODO Auto-generated method stub}}package 构建商品类别树;public class Client {public static void main(String[] args) {Composite root=new Composite("服装");Composite c1=new Composite("男装");Composite c2=new Composite("女装");Leaf leaf1=new Leaf("衬衣");Leaf leaf2=new Leaf("夹克");Leaf leaf3=new Leaf("裙子");Leaf leaf4=new Leaf("套装");root.Add(c1);root.Add(c2);c1.Add(leaf1);c1.Add(leaf2);c2.Add(leaf3);c2.Add(leaf4);root.Display(" ");// TODO Auto-generated method stub}}
更多推荐
组合模式—商品类别树的构建
发布评论