组合模式

举报
小鲍侃java 发表于 2021/09/09 23:20:49 2021/09/09
【摘要】 定义:将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。(为具有上下级关系两类 提供共同的接口,创建了属性结构) 目的:1.使两个对象拥有属性结构。            2.使上下级的类拥有相同的接口。 优...

定义:将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。(为具有上下级关系两类 提供共同的接口,创建了属性结构)

目的:1.使两个对象拥有属性结构。

           2.使上下级的类拥有相同的接口。

优点:1.屏蔽了类的不一致,客户可以通过相同的方式调用不同的层级。

           2.对客户实现了封装

           3.提供了统一的接口

缺点:1.其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒转原则

           2. 使得设计更加复杂。客户端需要花更多时间理清类之间的层次关系

类图:

代码:

component(上级关系类的共同抽象类)


  
  1. public abstract class ComponentPerson {
  2. protected String name;
  3. public ComponentPerson (String name) {
  4. this.name = name;
  5. }
  6. //进行招聘
  7. public abstract void recruitPerson();
  8. //解雇
  9. public abstract void firePerson();
  10. //工作
  11. public abstract void work(int depth);
  12. }

left(子类 员工类)


  
  1. public class Leaf extends ComponentPerson {
  2. public Leaf(String name) {
  3. super(name);
  4. }
  5. @Override
  6. public void recruitPerson() {
  7. //不能招聘
  8. throw new Exception();
  9. }
  10. @Override
  11. public void firePerson() {
  12. //不能解雇
  13. throw new Exception();
  14. }
  15. @Override
  16. public void work() {
  17. System.out.println("努力当员工");
  18. }
  19. }

Composite(父类 老板类)


  
  1. public class Composite extends ComponentPerson {
  2. public Composite(String name) {
  3. super(name);
  4. }
  5. @Override
  6. public void recruitPerson() {
  7. System.out.println("小伙子我看好你");
  8. }
  9. @Override
  10. public void firePerson() {
  11. System.out.println("对不起 你被开除了");
  12. }
  13. @Override
  14. public void work() {
  15. System.out.println("努力当好老板");
  16. }
  17. }

 

文章来源: baocl.blog.csdn.net,作者:小黄鸡1992,版权归原作者所有,如需转载,请联系作者。

原文链接:baocl.blog.csdn.net/article/details/102593141

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。