「程序员」看了这篇你将彻底了解组合模式( 六 )
透明性方式是将对组件的操作定义在抽象类中 , 这样客户端只需面对Component , 不需要关系具体的组件类型 。 但这会带来安全性的问题 , 因为叶子对象也具有了操作组件的方法 , 客户就有可能误对叶子对象调用这些方法 , 这样的操作是不安全的 。 如上面的示例 , 用这种方式写就是普通员工也有发布通知的功能了 , 这显然是不允许的 。
首先看一下透明方式的类图:
本文插图
透明性具体代码如下 , 为了充分体现透明性 , 代码和上面的改动有些大:
抽象类Staff(相当于Component) package Composite;import java.util.ArrayList;public abstract class Staff { public abstract void getInfo; public abstract void doSomething(String notice); //增加一个手下 public void addSubordinate(Staff staff) { throw new UnsupportedOperationException("不支持这个功能"); } public void removeSubordinate(Staff staff) { throw new UnsupportedOperationException("不支持这个功能"); } //查看我的手下 public ArrayList getSubordinate { return ; } public void notifyStaff(String notice1,String notice2){ }} 抽象类中定义了对员工操作的所有方法 , 包括增加 , 删除 , 查看和通知 。 还包括普通员工和管理者都有的获取个人信息方法和接收通知方法 , 这两个方法定义为抽象方法 。
普通员工类(相当于Leaf) package Composite;public class Programmer extends Staff{ private String name; private String position; public Programmer(String name, String position) { this.name = name; this.position = position; } @Override public void getInfo { String info = "姓名:"+this.name+" , 职位:"+this.position; System.out.println(info); } @Override public void doSomething(String notice) { System.out.println(this.name+","+this.position+","+notice); }} 这个类比较简单 , 就是增加了两个属性和实现了两个抽象方法 。
管理者类(相当于Composite) package Composite;import java.util.ArrayList;//管理者public class Manager extends Staff { private String name; private String position; public Manager(String name, String position) { this.name = name; this.position = position; } //他的手下列表 ArrayList subordinateList = ; public void addSubordinate(Staff staff) { //延迟初始化 if(subordinateList == ){ subordinateList = new ArrayList; } subordinateList.add(staff); } public ArrayList getSubordinate { return this.subordinateList; } @Override
推荐阅读
- IT真游瘾|3K价位屏幕谁能兼顾游戏和工作?这篇对比评测有干货
- CSDN|“编程能力差,90%输在了选择上!”CTO:多数程序员都是瞎努力!
- 零点科技派|国产机赶超苹果三星机,网友表示:android这些升级看了实名羡慕
- 快科技|程序员装机上了9900K+RTX 2070 灵魂拷问:性能过剩用来干啥?
- 『广告』QQ音乐今天这操作,吃相太难看了
- 「」有好戏看了!这两款5G新机又要干起来了,大家更看好谁?
- :程序员用Windows记事本写出了光追演示程序:每秒30帧
- 商家淘宝直播618最新玩法曝光:如何实现订单爆发式增长,看完这篇你就知道了!
- 图解MySQL索引:B-树、B+树,终于搞清楚了
- 手机大魔王适合学生党的几款手机,学生看了直呼内行
