设计模式(5)-适配器模式(Adapter Pattern)

适配器模式(Adapter Pattern),顾名思义,就像变压器,转接头差不多。就像美国的生活电压是110V,中国是220V,就需要一个变压器将220V转换成110V,或者一个Type-C接口想插如USB接口的东西,你就需要一个转换器,而这就是我们适配器模式干的事情。
适配器常用的有:类适配器,对象适配器,接口适配器。
通常包含三个角色:
目标(Target)角色:客=客户端所期待的接口,
源(Adaptee)角色:现有需要适配的接口。
适配器(Adapter)角色:适配器把源接口转换成目标接口。显然,这以角色不可一世接口,必须是具体的类。

一、对象适配器

我们以TypeC接口 使用转换器 能插上Usb接口为例。(TypeC->USB)
TypeC.java

public interface TypeC {
    void isTypeC();
}

Usb.java

public interface Usb {
    void isUsb();
}

Usber.java继承Usb类

public class Usber implements Usb {
    @Override
    public void isUsb() {
        System.out.println("I am a USB interface!");
    }
}

Adapter.java//将TypeC转为USB

public class Adapter implements TypeC{
    private Usb usb;

    public Adapter(Usb usb){
        this.usb = usb;
    }
    @Override
    public void isTypeC() {
        usb.isUsb();
    }
}

客户端调用。

public class Client {

    public static void main(String[] args) {
        Adapter adapter = new Adapter(new Usber());
        adapter.isTypeC();
    }
}
二、类适配器

TypeC.java

public interface TypeC {
    void isTypeC();
}

Usb.java

public interface Usb {
    void isUsb();
}

Usber.java继承Usb类

public class Usber implements Usb {
    @Override
    public void isUsb() {
        System.out.println("I am a USB interface!");
    }
}

Adapter.java//将TypeC转为USB

public class Adapter extends Usber implements TypeC{
    @Override
    public void isTypeC() {
        isUsb();
    }

}
三、接口适配器或者叫缺省适配模式

如果由一个接口里面定义了很多个方法,我们只想要使用其中的个别方法,如果直接实现接口就需要实现里面的所有方法,即使我们不需要使用的方法的返回一个null;还是会显得很多余,这个时候我们就可以使用适配器进行转换。定义一个抽象类适配器去实现接口,并把所有的方法都置空,然后我们再去继承抽象接口,重写我们需要的那几个方法就行。
Fruit.java

public interface Fruit{
 void fruidA();
 void fruidB();
 void fruidC();
 void fruidD();
}

Adapter.java

public abstract Adapter implements{
public void fruidA(){}
public void fruidB(){}
public void fruidC(){}
public void fruidD(){}
}

YellowFruit.java//实现类

public class YellowFruit extends Adapter{
@Overvide
public void fruidA(){
System.out.println("I am a banana");
}
}
在什么时候使用适配器模式

(1)系统需要使用现有的类,而此类的接口不符合系统的需要;
(2)想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包 括一些可能在将来引进的类;
(3)接口中方法太多。而我们只想使用其中个别的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值