设计模式--适配器模式

设计模式–适配器模式

一 什么是适配器模式?

适配器模式,也叫包装器模式(Wrapper Pattern),它将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类也可以一起工作

二 适配器的分类

  • 类的适配器模式:用于对类进行适配

  • 对象的适配器模式:用于对对象进行包装

  • 接口的适配器模式:用于对接口抽象化

三 适配器模式中的三个角色

  • 源角色:需要适配的目标类或接口

  • 目标角色:期望得到的接口

  • 适配器角色:用于把源角色转换为目标角色

四 何时使用适配器模式?

当系统现在需要使用已经创建好的现有的类,但是这些类的接口不符合系统的需要;或是当想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,都需要用的适配器模式

五 代码实现

我们可以用一个现实生活中非常简单的例子来举例,一般家庭电压都是220v,而我们的笔记本电脑可能只需要15v的电压,而不能直接使用家庭电压,这就需要一个适配器连接笔记本和家庭电压,通过适配器将家庭电压转换为笔记本可以适配的电压,才可以使笔记本正常工作,下面是代码的具体实现:

家庭电压类

public class Home {
    //家庭电压类输入方法
    public int input(){
        return 220;
    }
}


笔记本接口

public interface Computer {
    //笔记本接口输出电压方法
    public int output();
}


适配器类

public class Wrapper extends Home implements Computer {
    //通过继承家庭电压类和实现笔记本接口,重写笔记本类中的输出电压方法,使输出的电压适配笔记本的电压
    @Override
    public int output() {
        return input() - 205;
    }

    public static void main(String[] args) {
        Wrapper wrapper = new Wrapper();
        System.out.println("笔记本的输出电压是" + wrapper.output() + "v");;
    }
}

上述代码通过使用了类的适配器模式,将家庭电压转化为笔记本可以适配的电压,这就是适配器模式的简单使用,那么,适配器模式有什么优点呢?

  • 将目标类和适配器类解耦,通过引入一个适配器类来重用现有的适配者类,而无需修改原有代码

  • 增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性

  • 灵活性和拓展性都非常好,通过使用配置文件,可以很方便的更换适配器,也可以在不修改原有代码的基础上增加新的适配器类,完全符合”开闭原则“

  • 由于适配器类是适配者类的子类,因此可以在适配器类中置换一些适配者的方法,使得适配器的灵活性更强。

那么,上述代码可以使用对象适配器模式吗?我们只需要更改适配器类的书写方式,就可以变成对象适配器,将继承的父类改为在当前类中直接创建源对象类的引用,也可以调用源对象类中的方法,代码如下:

public class Wrapper implements Computer {
    //在当前类中创建源对象类的引用
    public Home home = new Home();
    @Override
    public int output() {
        return home.input() - 205;
    }

    public static void main(String[] args) {
        Wrapper wrapper = new Wrapper();
        System.out.println("笔记本的输出电压是" + wrapper.output() + "v");;
    }
}

这样,也可以实现转换家庭电压为笔记本所施佩的电压。两种类别从当前来看,类的适配器占用内存会小一些,因为对象适配器则需要在类中创建一个对象,会占用一定的内存空间,所以使用类的适配器会更好一些,但它适用于任何情况吗?

我们在使用笔记本电脑时,可能会需要使用键盘,鼠标,耳机等,他们也有相应的适配电压,则需要笔记本为这些设备适配相应的电压,那么在适配器类中不仅需要继承家庭电压类,还需要耳机类,键盘类,鼠标类,我们知道,在Java语言中,一个类只能有一个父类,只能被一个类所继承。所以,在需要适配多个现有的类时,我们不能使用类的适配器,而是使用对象适配器。当然,对象适配器也有他的缺点:

  • 与类适配器相比,要想置换适配者类的方法就不容易,如果一定要置换掉适配者类的一个或多个方法,就只好先做一个适配者类的子类,将适配者类的方法置换掉,然后再把适配者类的子类当作真正的适配者类进行适配,实现过程较为复杂

以上就是对适配器模式的一些理解和代码实现,谢谢大家观看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值