用示例代码来帮你了解组合模式
对于“设计模式”这个词大家肯定都不陌生,很多框架也用到了设计模式,但是大部分的开发者应该是没有深入的了解过,我准备硬肝下这23设计模式作为专题文章的开端,一共23种设计模式,我尽量在<23天肝完。
为什么要学习设计模式:https://blog.csdn.net/kaituozhe_sh/article/details/107922339
在我大学四年,对设计模式也没有什么概念,写代码就想着能实现就可以了,不会有设计模式那样的思想,但是当学习到了框架的时候,对于设计模式才有了一些更深入的了解,使用设计模式的代码在扩展性上会比暴力的代码更容易维护,特别是当一个程序猿离职了后,你去接手它的代码,里面是一大堆if else,这样真的会崩溃,修改都不知道从何下手
硬肝系列目录
创建型模式
结构型模式
行为型模式
到目前为止、23种设计模式的创建型模式已经给大家肝完了,现在我们进入到一个全新的章节,结构型模式!!!
什么是组合模式呢?
把一组结构相似的对象我们当作一个对象来对待,就像文件夹的存在形式一样,文件夹下面有子文件夹,就比如我们公司存在的上下级关系,总经理–副总经理–各个部门经理–员工,下面我们就用公司的上下级关系来给大家讲解组合模式
首先我们要先清楚,使用组合关系,必须是同一类对象,只不过这些对象是分上下级关系的,就像我们现在举得例子,不论职位,都是属于员工吧,那这样我们就可以抽象出来一个员工属性,里面包含的是员工姓名,性别,薪酬,还有最重要的一点,从属关系,这里我们用一个列表来标识
定义一个员工类
@Data
public class Employee {
private String name;
private String sex;
private BigDecimal salary;
private List<Employee> sub;
public Employee(String name, String sex, BigDecimal salary) {
this.name = name;
this.sex = sex;
this.salary = salary;
sub = new ArrayList<>();
}
//添加下属
public void add(Employee employee){
sub.add(employee);
}
public void remove(Employee employee){
sub.remove(employee);
}
}
我们来编写测试代码
public static void main(String[] args) {
//新建顶级的员工
Employee boss = new Employee("mayun","1",new BigDecimal(200000));
//新建子员工
Employee headDevelopment = new Employee("hecl","1",new BigDecimal(100000));
Employee headMarked = new Employee("dongmz","0",new BigDecimal(98000));
//新建叶子员工
Employee develop1 = new Employee("zhansan1","1",new BigDecimal(6000));
Employee develop2 = new Employee("zhansan2","0",new BigDecimal(8000));
Employee marked1 = new Employee("lisi1","0",new BigDecimal(12000));
Employee marked2 = new Employee("lisi1","0",new BigDecimal(9000));
boss.add(headDevelopment);
boss.add(headMarked);
headDevelopment.add(develop1);
headDevelopment.add(develop2);
headMarked.add(marked1);
headMarked.add(marked2);
}
根据上面代码我生成了如下结构图
也就是说在组合模式中我们维护一个list来存储下属员工信息,这样就可以维护一个组合关系模式
缺点:在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。
完成:TO: 2021/3/24 22:59