写在前面
设计模式,其实在一定程度上代表着最优解,最佳实践,由一部分开发人员根据经验总结而出的解决方案,分别针对不同的场景的最优解决方案。
在当前环境下,设计模式也被开发人员极为推崇,并且利用其解决众多的问题,所以,学习设计模式刻不容缓。
下面我们就来看一下“组合模式”。
组合模式,结构型设计模式的一种,其在树形结构的处理上,提供了将简单元素和复杂元素区分出来的方法,使得开发人员可以像处理简单元素一样来处理复杂元素,提高代码的可操作性。
使用场景
组合模式的使用场景,确定你是否需要开发人员忽略对象间的不同,并且可以将一并使用组合结构中的其他全部的对象。
优缺点
组合模式的优点就是在开发人员调用复杂业务对象时,会使用起来比较简单,而且使用方式趋于统一化,大大提高了开发人员使用上面的灵活性。
缺点就是组合模式其实违反了依赖倒置原则,这个依赖倒置原则之后我们在新文章中聊一下。
代码实现
创建一个类,并且该类拥有自身类的对象列表。
public class Employee { private String name; private String dept; private int salary; private List<Employee> subordinates; //构造函数 public Employee(String name,String dept, int sal) { this.name = name; this.dept = dept; this.salary = sal; subordinates = new ArrayList<Employee>(); } public void add(Employee e) { subordinates.add(e); } public void remove(Employee e) { subordinates.remove(e); } public List<Employee> getSubordinates(){ return subordinates; } public String toString(){ return ("Employee :[ Name : "+ name +", dept : "+ dept + ", salary :" + salary+" ]"); } }
使用上述类,来创建和打印员工的层次结构。
public class Employee { private String name; private String dept; private int salary; private List<Employee> subordinates; //构造函数 public Employee(String name,String dept, int sal) { this.name = name; this.dept = dept; this.salary = sal; subordinates = new ArrayList<Employee>(); } public void add(Employee e) { subordinates.add(e); } public void remove(Employee e) { subordinates.remove(e); } public List<Employee> getSubordinates(){ return subordinates; } public String toString(){ return ("Employee :[ Name : "+ name +", dept : "+ dept + ", salary :" + salary+" ]"); } }