设计模式——适配器模式

适配器模式

什么是适配器呢?

很简单,就是当我们出去旅游时,充电器有不同的型号插座,国标,美标,欧标,当我们要在外带的是国标的充电器,但插座是欧标的,为了充电,没办法一定要用这个插座,这时该怎么办呢?

土豪做法:直接买新的,哈哈哈,这种做法显然是最可行的,那不是每个人都是土豪,那么,我们就只能用个转接头,这样我们就可以使用这个插座了。

适配器模式就是,某个类的接口转成客户端希望的另一个类的接口表示

这么说还是有点抽象,我们逐一举例子写代码帮助理解

适配器模式主要分为三类,我们逐一进行学习:

1.类适配器模式

2.对象适配器模式

3.接口适配器模式

1. 类适配器模式

下面我们设计一个场景

有一个手机,它需要充电,充电,那么就要电源 但这个电源是220v的,充电器会将220v转成手机可以接受的电压进行充电。220v的电源是被适配值,充电器是适配器,5v是最终适配值

/**
 * 类适配器
 */
//被适配类
class Export220V{

    public int Export220v(){
        int v = 220;
        System.out.println("输出220V的电压");
        return v;
    }
}
//适配类
interface Export5V{
    public int Export5v();
}
//适配器
class Adapter extends Export220V implements Export5V{

    @Override
    public int Export5v() {
        int v5 = super.Export220v()/44;
        System.out.println("适配器处理后的电压:"+v5);
        return v5;
    }
}
//手机
class Phone {
    public Phone(Export5V export5V){
        charge(export5V);
    }
//    充电,这里只能接受5v的电压,所以只能传递5v的电压
    public void charge(Export5V volt){
        if(volt.Export5v()==5){
            System.out.println("电压为五伏,可以充电");
        }else {
            System.out.println("电压不稳,不可以充电");
        }
    }
}

这样处理后:

客户端只要传入一个适配器,就可以完成5v电压的适配了。

2.对象适配器

对象适配器就是在类适配器的基础上,去掉继承关系,采用聚合组合的方式,进行,满足合成复用原则。

 

//对象适配器
//将继承关系去掉采用聚合组合的方式替代
class Adapter2 implements Export5V{
    private Export220V export220V;
    public Adapter2(Export220V export220V){
        this.export220V = export220V;
    }
    @Override
    public int Export5v() {
        int v5 = export220V.Export220v()/44;
        System.out.println("适配器处理后的电压:"+v5);
        return v5;
    }
}

3.接口适配器

当一个接口,我们在使用它时,不希望重写它全部的方法,而是使用其某一个方法时,这时候,我们要使用接口适配器。

做法:

用一个抽象类继承该接口,默认实现该接口全部方法,之后通过匿名内部类的方式,重写需要的方法即可:

/**
 * 接口适配器模式
 */
interface InterfaceTest{
    void method01();
    void method02();
    void method03();
    void method04();
}
abstract class AbsAdapter implements InterfaceTest{

    @Override
    public void method01(){

    }
    @Override
    public void method02(){

    }
    @Override
    public void method03(){

    }
    @Override
    public void method04(){

    }

}
//        采用匿名内部类的方式
        AbsAdapter adapter = new AbsAdapter() {
            //            我们只需要method1
            @Override
            public void method01() {
                System.out.println("m1方法");
            }
        };
        adapter.method01();
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值