设计模式-结构模式-适配器模式

适配器模式将对象适配成用户需要的一种表现形式,目的是消除由于对象不匹配而导致的兼容性问题。主要分为三类:类的适配器模式,方法的适配器模式及接口的适配器模式。

我们先讲场景,其实适配器模式非常常见,比如jdbc对各种数据库的适配,比如SpringMvc对Handle的适配,由于HandleMapping,HandleAdapter这个案例不是太好理解,这里我们为了更好的诠释适配器模式,可以俗一点,找个通用案例:电压适配,比如说,我们正常民用电是220V电压,那么很多电器充电需要5V电压,那么就需要用电压适配器转换一下,好了下面进入案例。

一、类适配器模式:

Target是客户希望的表现形式,我们可以为电器提供220V和5V的电压。

Adaptee是我们需要适配的类,是220V电压。

ClassAdapter是我们的适配器,适配220V电压到5V。

 

public class Adaptee {

    public void outPutAc220V(){
        System.out.println("输出220V电压");
    }
}
public interface Target {

    public void outPutAc5V();

    public void outPutAc220V();
}
public class ClassAdapter extends Adaptee implements Target {

    @Override
    public void outPutAc220V() {
        super.outPutAc220V();
    }

    @Override
    public void outPutAc5V() {
        System.out.println("输出5V电压");
    }
}
public class Test {

    public static void main(String[] args) {
        Target target = new ClassAdapter();
        target.outPutAc5V();
        ((ClassAdapter) target).outPutAc220V();
    }
}

二、方法适配器模式:

 代码:

除了Adapter有变化,其他两个类都跟类适配器一样,此处不重复贴,只上方法适配器代码。

public class MethodAdapter implements Target{

    private Adaptee adaptee;

    public MethodAdapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    @Override
    public void outPutAc5V() {
        System.out.println("输出5V电压");
    }

    public void outPutAc220V() {
        adaptee.outPutAc220V();
    }
}
public class Test {

    public static void main(String[] args) {
        Adaptee adaptee = new Adaptee();
        Target target1 = new MethodAdapter(adaptee);
        target1.outPutAc220V();
        target1.outPutAc5V();
    }
}

三、接口适配器模式

设计原则里有个接口隔离原则,子类不需要的接口就不用实现,在这边也是这个作用。子类无需实现自己不需要的接口。

 作为人类,可以有很多技能,例如主持,开车,编程;所谓术业有专攻,主持人就专心的实现主持的技能,司机专心提升开车技巧,同理,程序猿需要努力提升自己的编码能力。上代码;

public interface Human {

    void speak();

    void drive();

    void coding();
}
public abstract class Swapper implements Human{
    @Override
    public void speak() {}

    @Override
    public void drive() {}

    @Override
    public void coding() {}
}
public class Driver extends Swapper {
    @Override
    public void drive() {
        System.out.println("努力提升驾驶技巧");
    }
}
public class SoftwearEngineer extends Swapper{
    @Override
    public void coding() {
        System.out.println("努力提升编程技巧");
    }
}
public class Test {

    public static void main(String[] args) {
        Swapper driver = new Driver();
        driver.drive();
    }
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值