设计模式之组合模式的学习思考
来源:互联网 发布:国外域名注册商性价比 编辑:程序博客网 时间:2024/06/05 19:23
组合模式(Compostite Pattern)是设计模式里的结构型模式一种。
它的结构类似于数据结构里的树形结构。
把一组对象通过容器类来存放,通过最外部的对象来逐渐的显示里面的对象。
优点:
- 高层模块调用简单
- 节点自由增加
缺点:
- 使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。
- 依赖倒置原则:这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。
开闭原则:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类
小例子:公司的组织结构可以用组合模式来表示;
代码:
import java.util.ArrayList;import java.util.List;class Employee{ private String name; private String dept; private int salary; private List<Employee> subordinates; Employee(String name,String dept,int salary){ this.name=name; this.dept=dept; this.salary=salary; subordinates=new ArrayList<Employee>(); } void add(Employee e){ subordinates.add(e); } void remove(Employee e){ subordinates.remove(e); } List<Employee> getSubordinates(){ //返回容器对象,是实现树形结构的基础 return subordinates; } public String toString(){ return ("Emplyee:[ Name:"+name+",dept:"+dept+",salary:"+salary+"]"); }}public class CompositePatternDemo { public static void main(String[] args) { Employee CEO=new Employee("李明","CEO",30000); Employee headSales = new Employee("王一","Head Sales", 20000); Employee headMarketing = new Employee("王二","Head Marketing", 20000); Employee clerk1 = new Employee("孙一","Marketing", 10000); Employee clerk2 = new Employee("孙二","Marketing", 10000); Employee salesExecutive1 = new Employee("赵一","Sales", 10000); Employee salesExecutive2 = new Employee("赵二","Sales", 10000); CEO.add(headSales); CEO.add(headMarketing); headSales.add(salesExecutive1); headSales.add(salesExecutive2); headMarketing.add(clerk1); headMarketing.add(clerk2); System.out.println(CEO); for (Employee headEmployee : CEO.getSubordinates()) { System.out.println(headEmployee); for (Employee employee : headEmployee.getSubordinates()) { System.out.println(employee); } } }}
输出:
Emplyee:[ Name:李明,dept:CEO,salary:30000]Emplyee:[ Name:王一,dept:Head Sales,salary:20000]Emplyee:[ Name:赵一,dept:Sales,salary:10000]Emplyee:[ Name:赵二,dept:Sales,salary:10000]Emplyee:[ Name:王二,dept:Head Marketing,salary:20000]Emplyee:[ Name:孙一,dept:Marketing,salary:10000]Emplyee:[ Name:孙二,dept:Marketing,salary:10000]
注意点:
- 重写了Objec的toString方法后,其实是打印语句的格式控制,打印语句直接打印对象。
阅读全文
1 0
- 设计模式之组合模式的学习思考
- 设计模式之单例模式的学习思考
- 设计模式之创建者模式的学习思考
- 设计模式之原型模式的学习思考
- 设计模式之适配器模式的学习思考
- 设计模式之桥接模式的学习思考
- 设计模式之过滤器模式的学习思考
- 设计模式之装饰器模式的学习思考
- 设计模式之外观模式的学习思考
- 设计模式之享元模式的学习思考
- 设计模式之代理模式的学习思考
- 设计模式之命令模式的学习思考
- 设计模式之解释器模式的学习思考
- 设计模式之迭代器模式的学习思考
- 设计模式之中介者模式的学习思考
- 设计模式之备忘录模式的学习思考
- 设计模式学习笔记之组合模式
- 设计模式学习笔记之组合模式
- opencv函数之-addWeighted
- 三五、Git上传代码到码云(上传、下载、修改账号、生成SSH公钥)
- 如何将bug杀死在摇篮里?
- javascript中在定义函数的几种形式
- Selenium3 简明教程(Python版)
- 设计模式之组合模式的学习思考
- adb命令行安装和卸载apk包到真机
- solr6.6 创建一个core,并导入索引数据
- SASS基本语法及搭建并结合COMPASS高效工作
- 关于Serverless服务的几点建议
- 接口回掉作用整理
- mui框架移动端a标签不跳转
- SPRINGMYBATIS01 Unit06:Spring对JDBC的 整合支持 、 Spring+JDBC Template
- linux定时备份数据库(mysql)