打字猴:1.700466349e+09
1700466349
1700466350 A、B两个图框代表已经塑模成型的物体A和物体B,那现在要求把A和B安装在一起使用,如何安装?两者的接口不一致,是不可能安装在一起使用的,那怎么办?引入一个物体C,如图19-6所示。
1700466351
1700466352
1700466353
1700466354
1700466355 图19-6 引入物体C
1700466356
1700466357 引入物体C后,C适应了物体A的接口,同时也适应了物体B的接口,然后三者就可以组合成一个完整的物体,如图19-7所示。
1700466358
1700466359
1700466360
1700466361
1700466362 图19-7 完美组合
1700466363
1700466364 其中的物体C就是我们说的适配器,它在中间起到了角色转换的作用,把原有的长条形接口转换了三角形接口。在我们软件业的设计模式中,适配器模式也是相似的功能,那我们先来看看适配器模式的三个角色。
1700466365
1700466366 ❑Target目标角色
1700466367
1700466368 该角色定义把其他类转换为何种接口,也就是我们的期望接口,例子中的IUserInfo接口就是目标角色。
1700466369
1700466370 ❑Adaptee源角色
1700466371
1700466372 你想把谁转换成目标角色,这个“谁”就是源角色,它是已经存在的、运行良好的类或对象,经过适配器角色的包装,它会成为一个崭新、靓丽的角色。
1700466373
1700466374 ❑Adapter适配器角色
1700466375
1700466376 适配器模式的核心角色,其他两个角色都是已经存在的角色,而适配器角色是需要新建立的,它的职责非常简单:把源角色转换为目标角色,怎么转换?通过继承或是类关联的方式。
1700466377
1700466378 各个角色的职责都已经非常清楚,我们再来看看其通用源码,目标接口如代码清单19-8所示。
1700466379
1700466380 代码清单19-8 目标角色
1700466381
1700466382 public interface Target{
1700466383
1700466384 //目标角色有自己的方法
1700466385
1700466386 public void request();
1700466387
1700466388 }
1700466389
1700466390 目标角色是一个已经在正式运行的角色,你不可能去修改角色中的方法,你能做的就是如何去实现接口中的方法,而且通常情况下,目标角色是一个接口或者是抽象类,一般不会是实现类。一个正在服役的目标角色,如代码清单19-9所示。
1700466391
1700466392 代码清单19-9 目标角色的实现类
1700466393
1700466394 public class ConcreteTarget implements Target{
1700466395
1700466396 public void request(){
1700466397
1700466398 System.out.println(“if you need any help,pls call me!”);}
[ 上一页 ]  [ :1.700466349e+09 ]  [ 下一页 ]