【设计模式】组合模式

组合模式

组合模式用来描述树型结构,在一个树型结构中,叶子节点被称为叶子或简单项目,其他节点被称为整体项目或组合
主要由以下几种角色构成

  1. Client:访问者,调用组合模型的对象
  2. Component:组件,描述简单项目和整体项目的共有操作
  3. Leaf:叶子,描述一个简单项目,是最基本的结构
  4. Composite:组合,包含叶子或者其他组合

类图

在这里插入图片描述
上图所示是组合模式的类图

简单例子

公司的结构相当于一个树型结构——一个公司包含多个部门,部门之下又有许多员工或者更多的子部门,员工即是叶子,部门或公司相当于组合。
现已知这个组合,需要计算公司员工的总工资

// 相当于Component角色,部门和员工都可以单独计算工资
interface Salable {
	double calSalary();
}
// 相当于Leaf角色
class Employee implements Salable {
	String name;
	double salary;
	public double calSalary() {
		return this.salary;
	}
}
// 相当于Composite角色
class Department implements Salable {
	Employee leader;
	List<Employee> others;
	public double calSalary() {
		double sum = leader.salary;
		if (CollectionUtils.isNotEmpty(others)) {
			others.foreach(one -> sum += one.salary})
		}
		return sum;
	}
}

SpringMVC中的组合模式

Web项目中使用@EnableWebMvc注解后,会将DelegatingWebMvcConfiguration对象加载进Spring容器,该容器中维护了一个名叫WebMvcConfigurerComposite的组合,WebMvcConfigurerComposite中维护了多个WebMvcConfigurer对象
类图如下:
在这里插入图片描述
Spring在初始化DelegatingWebMvcConfiguration对象的时候,将多个自定义的WebMvcConfigurer实现类注入WebMvcConfigurerComposite中

以上DelegatingWebMvcConfiguration相当于Client角色,WebMvcConfigurer定义了多个简单项目和整体的公共操作,相当于Component角色,SpringMvcConfig是叶子,WebMvcConfigurerComposite中包含多个SpringMvcConfig,也可以包含其他WebMvcConfigurerComposite,相当于Composite角色

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值