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

一,基本介绍

1.将某个类的接口转换成客户端期望的另一个接口表示,主要目的是为了兼容性,让原本因为接口不匹配不能在一起工作的两个类可以协同工作

2.适配器模式属于结构性模式

3.主要分为3类:类适配器模式,对象适配器模式,接口适配器模式

二,案例引入

案例:手机充电器,充电器本省相当于适配器类,220v交流电相当于被适配者,目标是得到手机达到手机要求的电流

1.类适配器

<1>代码

Voltage220V:相当于220v插座口

package 设计模式.适配者模式.类适配器;

public class Voltage220v {
    public int outPut220V(){
        int src=220;
        System.out.println("");
        return src;
    }
}

Voltage5V:相当于插在手机上的接口

package 设计模式.适配者模式.类适配器;

public interface Voltage5v {
    public int outPut5V();
}

VoltageAdaptor:适配器调节电压的装置

package 设计模式.适配者模式.类适配器;

public class VoltageAdaptor extends Voltage220v implements Voltage5v {
    @Override
    public int outPut5V() {
        return outPut220V()/44;
    }
}

Phone:手机

package 设计模式.适配者模式.类适配器;

public class Phone{
    public void charging(Voltage5v v){
        if(v.outPut5V()==5){
            System.out.println("电压正常");
        }else{
            System.out.println("电压异常");
        }
    }
}

Client

package 设计模式.适配者模式.类适配器;

public class Client {
    public static void main(String []args){
        Phone phone=new Phone();
        phone.charging(new VoltageAdaptor());
    }
}

<2>注意事项

----java是单继承机制,所以VoltageAdaptor类需要继承Voltage220V是一缺点

----Voltage220V的方法在VoltageAdaptor会暴露,增加了使用成本

2.对象适配器

<1>VoltageAdaptor继承Voltage220V变成持有Voltage220V的实例对象,继承变为组合

<2>代码

Voltage220V:相当于220v插座口

package 设计模式.适配者模式.对象适配器;

public class Voltage220V {
    public int outPut220V(){
        int src=220;
        System.out.println("");
        return src;
    }
}

Voltage5V:相当于插在手机上的接口

package 设计模式.适配者模式.对象适配器;
public interface Voltage5V {
    public int outPut5V();
}

VoltageAdaptor:适配器调节电压的装置

package 设计模式.适配者模式.对象适配器;

public class VoltageAdaptor implements Voltage5V{
    private Voltage220V v;
    public VoltageAdaptor(Voltage220V v){
        this.v=v;
    }
    @Override
    public int outPut5V() {
        return v.outPut220V()/44;
    }
}

Phone:手机

package 设计模式.适配者模式.对象适配器;

public class Phone{
    public void charging(Voltage5V v){
        if(v.outPut5V()==5){
            System.out.println("电压正常");
        }else{
            System.out.println("电压异常");
        }
    }
}

Client

package 设计模式.适配者模式.对象适配器;

public class Client {
    public static void main(String []args){
        Phone phone=new Phone();
        phone.charging(new VoltageAdaptor(new Voltage220V()));
    }
}

3,接口适配器模式

<1>当不需要实现接口所有的方法时,可以先设计一个抽象类实现接口,并为该抽象类中的每一个方法提供一个默认实现,那么抽象类的子类可以有选择的去覆盖父类的某些方法即可
<2>代码

Interface:提供了4个方法

package 设计模式.适配者模式.接口适配器;

public interface Interface {
    public void m1();
    public void m2();
    public void m3();
    public void m4();
}

AbsAdaptor:只用得到方法m1

package 设计模式.适配者模式.接口适配器;

public class AbsAdaptor implements Interface {
    @Override
    public void m1() {
        System.out.println("只需要用到方法m1");
    }

    @Override
    public void m2() {

    }

    @Override
    public void m3() {

    }

    @Override
    public void m4() {

    }
}

Client

package 设计模式.适配者模式.接口适配器;

public class Client {
    public static void main(String []args){
        new AbsAdaptor().m1();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值