1.前言
- 设计模式共有23种(点击这里查看更多分类),根据目的准则分类,分为三类
- 创建型设计模式,共5种:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。
- 结构型设计模式,共7中:适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、响元模式。
- 行为设计模式,共11种:策略模式、模版方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
- 这里介绍一下组合模式。
2.特点
- 定义:将对象组合成树型结构用以表示部分-整体的层次结构。
2.1.代码说明
创建一个公司类,如下
public class Company {
private String name;
private String workType;
private List<Company> mList;
//构造函数
public Company(String name, String workType) {
this.name = name;
this.workType = workType;
mList = new ArrayList<Company>();
}
public void add(Company e) {
mList.add(e);
}
public void remove(Company e) {
mList.remove(e);
}
public List<Company> getSubordinates() {
return mList;
}
public String toString() {
return ("Company :[ Name : " + name
+ ", workType : " + workType + " ]");
}
}
调用,如下:
Company CEO = new Company("11111", "boss");
Company headSales = new Company("22222", "经理1");
Company clerk1 = new Company("3333", "市场1");
Company clerk2 = new Company("4444", "市场2");
CEO.add(headSales);
headSales.add(clerk1);
headSales.add(clerk2);
System.out.println(CEO);
for (Company headEmployee : CEO.getSubordinates()) {
System.out.println(headEmployee);
for (Company employee : headEmployee.getSubordinates()) {
System.out.println(employee);
}
}
//--------打印结果--------
System.out: Company :[ Name : 11111, workType : boss ]
System.out: Company :[ Name : 22222, workType : 经理1 ]
System.out: Company :[ Name : 3333, workType : 市场1 ]
System.out: Company :[ Name : 4444, workType : 市场2 ]
2.2.优缺点
- 优点:高层模块调用简单;节点增加便捷
- 缺点:违法了依赖倒置原则(高层模块不应该依赖于底层模块,高低层模块都应该依赖于抽象)
2.3.使用场景
- 树型结构场景,文件、文件夹的管理
3.总结
有疑问可以留言!