设计模式之禅--适配器模式

1.适配器模式的定义

将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

2.适配器模式类比图:

A、B两个图框代表已经塑模成型的物体A和物体B,那现在要求把A和B安装在一起使用,如何安装?两者的接口不一致,是不可能安装在一起使用的,那怎么办?引入一个物体C.其中的物体C就是我们说的适配器,它在中间起到了角色转换的作用,把原有的长条形接口转换了三角形接口

引入物体C后,C适应了物体A的接口,同时也适应了物体B的接口,然后三者就可以组合成一个完整的物体

3.适配器模式的三个角色:

●Target目标角色该角色定义把其他类转换为何种接口,也就是我们的期望接口,例子中的IUserInfo接口就是目标角色。●Adaptee源角色你想把谁转换成目标角色,这个“谁”就是源角色,它是已经存在的、运行良好的类或对象,经过适配器角色的包装,它会成为一个崭新、靓丽的角色。

●Adapter适配器角色适配器模式的核心角色,其他两个角色都是已经存在的角色,而适配器角色是需要新建立的,它的职责非常简单:把源角色转换为目标角色,怎么转换?通过继承或是类关联的方式。

总之适配器角色需要继承新类,实现原有接口,这样就可以承上启下,在这个适配器里做操作处理了

4.代码示例:


public interface target {
    // 目标拥有自己的方法
     void request();
}
class targetImpl implements target{

    @Override
    public void request() {
        System.out.println("我是原来的类");
    }
}

/**源角色
* */
 interface adatee{
    // 原有业务逻辑
    public String dosomething();
 }
 class adateeImpl implements adatee{

     @Override
     public String dosomething() {
         String aa = "我是新类,需要被适配";
         return aa;
     }
 }


/**适配器角色
* */
class adapter extends adateeImpl implements target{

    @Override
    public void request() {
        String dosomething = super.dosomething();
        System.out.println("我是适配类,我已经对:<<"+dosomething+">>做了处理");
    }
}

/**客户端
* */
class  client{
    public static void main(String[] args) {
        target target = new targetImpl();
        target.request();
        adapter adapter = new adapter();
        adapter.request();
    }
}

5.适配器模式的应用

 适配器模式的优点

●适配器模式可以让两个没有任何关系的类在一起运行,只要适配器这个角色能够搞定他们就成。

●增加了类的透明性想想看,我们访问的Target目标角色,但是具体的实现都委托给了源角色,而这些对高层次模块是透明的,也是它不需要关心的。

●提高了类的复用度当然了,源角色在原有的系统中还是可以正常使用,而在目标角色中也可以充当新的演员。

●灵活性非常好某一天,突然不想要适配器,没问题,删除掉这个适配器就可以了,其他的代码都不用修改,基本上就类似一个灵活的构件,想用就用,不想就卸载。

6 适配器模式的使用场景

适配器应用的场景只要记住一点就足够了:你有动机修改一个已经投产中的接口时,适配器模式可能是最适合你的模式。比如系统扩展了,需要使用一个已有或新建立的类,但这个类又不符合系统的接口,怎么办?使用适配器模式,这也是我们例子中提到的。

7.适配器模式的注意事项

适配器模式最好在详细设计阶段不要考虑它,它不是为了解决还处在开发阶段的问题,而是解决正在服役的项目问题,没有一个系统分析师会在做详细设计的时候考虑使用适配器模式,这个模式使用的主要场景是扩展应用中,就像我们上面的那个例子一样,系统扩展了,不符合原有设计的时候才考虑通过适配器模式减少代码修改带来的风险。适配器模式是一个补偿模式,或者说是一个“补救”模式,通常用来解决接口不相容的问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值