打字猴:1.700455173e+09
1700455173
1700455174 }
1700455175
1700455176 public class BMW implements ICar{
1700455177
1700455178 //宝马车当然也可以开动了
1700455179
1700455180 public void run(){
1700455181
1700455182 System.out.println(“宝马汽车开始运行……”);
1700455183
1700455184 }
1700455185
1700455186 }
1700455187
1700455188 在业务场景中,我们贯彻“抽象不应该依赖细节”,也就是我们认为抽象(ICar接口)不依赖BMW和Benz两个实现类(细节),因此在高层次的模块中应用都是抽象,Client的实现过程如代码清单3-8所示。
1700455189
1700455190 代码清单3-8 业务场景
1700455191
1700455192 public class Client{
1700455193
1700455194 public static void main(String[]args){
1700455195
1700455196 IDriver zhangSan=new Driver();
1700455197
1700455198 ICar benz=new Benz();
1700455199
1700455200 //张三开奔驰车
1700455201
1700455202 zhangSan.drive(benz);
1700455203
1700455204 }
1700455205
1700455206 }
1700455207
1700455208 Client属于高层业务逻辑,它对低层模块的依赖都建立在抽象上,zhangSan的表面类型是IDriver,Benz的表面类型是ICar,也许你要问,在这个高层模块中也调用到了低层模块,比如new Driver()和new Benz()等,如何解释?确实如此,zhangSan的表面类型是IDriver,是一个接口,是抽象的、非实体化的,在其后的所有操作中,zhangSan都是以IDriver类型进行操作,屏蔽了细节对抽象的影响。当然,张三如果要开宝马车,也很容易,我们只要修改业务场景类就可以,实现过程如代码清单3-9所示。
1700455209
1700455210 代码清单3-9 张三驾驶宝马车的实现过程
1700455211
1700455212 public class Client{
1700455213
1700455214 public static void main(String[]args){
1700455215
1700455216 IDriver zhangSan=new Driver();
1700455217
1700455218 ICar bmw=new BMW();
1700455219
1700455220 //张三开奔驰车
1700455221
1700455222 zhangSan.drive(bmw);
[ 上一页 ]  [ :1.700455173e+09 ]  [ 下一页 ]