12.2 封装变化
我们先给出一条OOP关于封装变化的设计原则。
Identify the aspects of your application that vary and separate them from what stays the same.
找出你的应用程序变化的那些部分,并把它们和那些不变的部分分开。
封装这些变化,这样,你可以改变或者扩展那些可变的部分,而不去改变那些不变的部分,改变和扩展可变的部分就不会影响那些不变的部分。
由于回家的方式会发生变化,我们之前按照回家人的分类把它进行了封装,但是这样的分类太多了,其实我们发现更合理的方法是把回家的方式进行封装,而非按照人的分类封装。于是我们抽象出Travellable接口,把坐飞机、坐大巴等回家的方式封装在各自的实现类里,于是,UML静态类图如图12-1所示。
图12-1
ByAir类、ByCoach类和ByTrain类实现了Travellable接口。PassengerByAirAnd Coach对象含有两个Travellable对象:ByAir对象和ByCoach对象。
Travellable接口及其实现类的代码如下。
接下来,我们来看看PassengerByAirAndCoach类如何实现,代码如下。
PassengerByAirAndCoach类包含ByAir类的对象first和ByCoach类的对象second。于是,我们的测试代码如下。
最后,执行结果如下。