「程序员」看了这篇你将彻底了解组合模式( 四 )
(5)设计目的不同:接口是为了对类的行为进行约束 , 用来规定实现类有什么功能 。 抽象类是为了代码复用 , 当不同的类具有相同的行为时 , 并且这其中还有一部分的行为实现方式一致时 , 将这些类抽象出一个抽象类 , 在抽象类中将相同的方法实现 , 就达到了代码复用的目的 。
(6) 接口是隐式抽象的 , 声明时没有必要使用abstract关键字 , 接口中的方法也是隐式抽象的 , 也没有必要使用abstract关键字 。 接口中的成员变量隐式为static final , 而抽象类不是 。
好了 , 再来看上面的类图 , 既然所有的员工都有获取个人信息和接收通知的方法 , 就没有必要将它们抽象出接口了 , 并且这两个方法的实现体在不同的实现类中是相同的 , 所有将他们抽象出抽象类更能体现代码的复用性 。
本文插图
解决方案
修改类图 , 将接口改成抽象类 , 如下:
本文插图
Staff抽象类: package Composite;public abstract class Staff { private String name; private String position; public Staff(String name, String position) { this.name = name; this.position = position; } public String getInfo { String info = "姓名:"+this.name+" , 职位:"+this.position; return info; } public void doSomething(String notice) { System.out.println(this.name+","+this.position+","+notice); }} 管理者Manager类: package Composite;import java.util.ArrayList;//管理者public class Manager extends Staff { //他的手下列表 ArrayList subordinateList = new ArrayList; public Manager(String name, String position) { super(name, position); } //增加一个手下 public void addSubordinate(Staff staff) { this.subordinateList.add(staff); } public void removeSubordinate(Staff staff) { this.subordinateList.remove(staff); } //查看我的手下 public ArrayList getSubordinate { return this.subordinateList; } //通知手下的方法 public void notifyStaff(String notice1,String notice2){ ArrayList subordinateList = this.getSubordinate; for(Staff s:subordinateList){ //如果手下是程序员 , 调用程序员的接收通知的方法 if(s instanceof Programmer){ ((Programmer) s).doSomething(notice1); }else { //手下是管理者 , 调用管理者的接收通知的方法 , 同时将通知再向下级传递 ((Manager) s).doSomething(notice2); ((Manager) s).notifyStaff(notice1,notice2); } } }} 普通员工Programmer类: package Composite;public class Programmer extends Staff{ public Programmer(String name, String position) {
推荐阅读
- IT真游瘾|3K价位屏幕谁能兼顾游戏和工作?这篇对比评测有干货
- CSDN|“编程能力差,90%输在了选择上!”CTO:多数程序员都是瞎努力!
- 零点科技派|国产机赶超苹果三星机,网友表示:android这些升级看了实名羡慕
- 快科技|程序员装机上了9900K+RTX 2070 灵魂拷问:性能过剩用来干啥?
- 『广告』QQ音乐今天这操作,吃相太难看了
- 「」有好戏看了!这两款5G新机又要干起来了,大家更看好谁?
- :程序员用Windows记事本写出了光追演示程序:每秒30帧
- 商家淘宝直播618最新玩法曝光:如何实现订单爆发式增长,看完这篇你就知道了!
- 图解MySQL索引:B-树、B+树,终于搞清楚了
- 手机大魔王适合学生党的几款手机,学生看了直呼内行
