努力才会收获成功,不努力只能永远羡慕别人。
组合模式是设计模式中结构型模式的一种。它表示了一种将相似对象组合成树状结构的“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
组合模式的目的是:让客户端不再区分操作的是组合对象还是叶子对象,而是以一个统一的方式来操作。实现这个目标的关键之处,是设计一个抽象的组件类,让它可以代表组合对象和叶子对象。这样客户端就不用区分到底是组合对象还是叶子对象了,只需要全部当成组件对象进行统一的操作就可以了。
统一元素与部分整体,简化处理代码。将元素内部结构同处理程序解耦,从而一致的对待元素与部分整体。例:文件系统、企业结构都是组合模式的典型应用。
Dept(部门抽象类)
import java.util.ArrayList; import java.util.List; /** * 部门抽象类 * * @author ZhengNC * @date 2020/9/2 19:36 */ public abstract class Dept { private List<Dept> deptList = new ArrayList<>(); /** * 添加子部门 * * @param dept */ public void addDept(Dept dept){ deptList.add(dept); } /** * 移除子部门 * * @param dept */ public void removeDept(Dept dept){ deptList.remove(dept); } /** * 获取所有子部门 * * @return */ public List<Dept> getDeptList(){ return deptList; } /** * 打印部门名称 */ public abstract void printName(); }Company(公司)
/** * 公司 * * @author ZhengNC * @date 2020/9/2 19:42 */ public class Company extends Dept { @Override public void printName() { System.out.println("公司"); } }HumanResourcesDept(人力资源部)
/** * 人力资源部 * * @author ZhengNC * @date 2020/9/2 19:44 */ public class HumanResourcesDept extends Dept { @Override public void printName() { System.out.println("人力资源部"); } }MarketingDept(营销事业部)
/** * 营销事业部 * * @author ZhengNC * @date 2020/9/2 19:46 */ public class MarketingDept extends Dept { @Override public void printName() { System.out.println("营销事业部"); } }OperationManagementDept(运营管理部)
/** * 运营管理部 * * @author ZhengNC * @date 2020/9/2 19:49 */ public class OperationManagementDept extends Dept { @Override public void printName() { System.out.println("运营管理部"); } }MarketingOperationDept(营销运维部)
/** * 营销运维部 * * @author ZhengNC * @date 2020/9/2 19:55 */ public class MarketingOperationDept extends Dept { @Override public void printName() { System.out.println("营销运维部"); } }BusinessSupportDept(业务支持部)
/** * 业务支持部 * * @author ZhengNC * @date 2020/9/2 19:57 */ public class BusinessSupportDept extends Dept { @Override public void printName() { System.out.println("业务支持部"); } }MarketDept(营销市场部)
/** * 营销市场部 * * @author ZhengNC * @date 2020/9/2 20:00 */ public class MarketDept extends Dept { @Override public void printName() { System.out.println("营销市场部"); } }输出结果:
公司 人力资源部 营销事业部 营销运维部 业务支持部 营销市场部 运营管理部