1700470460
程序运行正确,输出结果也是我们期望的,但是结果正确并不表示程序是最优的,我们来看看场景类Client,它代表的是高层模块,或者说是非“近亲”模块的调用者,注意看backup变量的使用,它对于高层模块完全是多余的,为什么一个状态的保存和恢复要让高层模块来负责呢?这应该是Boy类的职责,而不应该让高层模块来完成,也就是破坏了Boy类的封装,或者说Boy类没有封装好,它应该是把backup的定义容纳进来,而不应该让高层模块来定义。
1700470461
1700470462
问题我们已经知道了,就是Boy类封装不够,那我们应该如何修改呢?如果在Boy类中再增加一个方法或者其他的内部类来保存这个状态,则对单一职责原则是一种破坏,想想看单一职责原则是怎么说的?一个类的职责应该是单一的,Boy类本身的职责是追求女孩子,而保留和恢复原始状态则应该由另外一个类来承担,那我们把这个类取名就叫做备忘录,这和大家经常在桌面上贴的那个便签是一个概念,分析到这里我们的思路已经非常清楚了,我们来修改一下类图,如图24-2所示。
1700470463
1700470464
1700470465
1700470466
1700470467
图24-2 完善后的男孩状态类图
1700470468
1700470469
改动很小,增加了一个新的类Memento,负责状态的保存和备份;同时,在Boy类中增加了创建一份备忘录createMemento和恢复一个备忘录resotreMemento,我们先来看Boy类的变化,如代码清单24-3所示。
1700470470
1700470471
代码清单24-3 改进后的男孩状态类
1700470472
1700470473
public class Boy{
1700470474
1700470475
//男孩的状态
1700470476
1700470477
private String state=””;
1700470478
1700470479
//认识女孩子后状态肯定改变,比如心情、手中的花等
1700470480
1700470481
public void changeState(){
1700470482
1700470483
this.state=“心情可能很不好”;
1700470484
1700470485
}
1700470486
1700470487
public String getState(){
1700470488
1700470489
return state;
1700470490
1700470491
}
1700470492
1700470493
public void setState(String state){
1700470494
1700470495
this.state=state;
1700470496
1700470497
}
1700470498
1700470499
//保留一个备份
1700470500
1700470501
public Memento createMemento(){
1700470502
1700470503
return new Memento(this.state);
1700470504
1700470505
}
1700470506
1700470507
//恢复一个备份
1700470508
1700470509
public void restoreMemento(Memento_memento){
[
上一页 ]
[ :1.70047046e+09 ]
[
下一页 ]