设计模式——适配器模式

什么是适配器模式

考虑这么一个场景,系统有接口A、A含有D函数,类B继承了A并实现了D,现在我们想用类C来替换类B,类C中的E方法和类B实现的D函数功能类似,效率更高,但是类C的该方法名称和D不一样,此时我们怎么做呢?

1、更改D函数的名称,但是系统中继承A的其他类就会出现问题

2、更改E方法的名称,但是系统中引用E方法的地方又会出错

此时便可以使用适配器模式

 

适配器模式的角色
 

Target:目标抽象类,即例子中的接口A

Adapter:适配器类

Adaptee:适配者类,即例子中的类C

Client:客户类

 

适配器实现有两种方式:

1、类适配器:

../_images/Adapter_classModel.jpg

适配器类继承了适配者类和接口:
 

public interface Target {
    void request();
}
public class Adaptee {
    void SpecificRequest(){
        System.out.println("适配者的方法");
    }
public class Adapter extends Adaptee implements Target{

    @Override
    public void request() {
        this.SpecificRequest();
    }
    

这种写法缺点很明显,一个适配器类只能服务于一个适配者,当系统中适配者类比较多时,这种写法就不太合适,但是这种写法也有一定的灵活性,适配器可以覆盖适配者类的方法

 

当系统中一个接口的适配者类比较多时,可以考虑使用对象适配器:


../_images/Adapter.jpg

 

public class Adapter2 implements Target{

    Adaptee adaptee;
    
    Adapter2(Adaptee adaptee){
        this.adaptee=adaptee;
    }
    @Override
    public void request() {
       this.adaptee.SpecificRequest();
    }
    
}

 

将适配者的装配交给客户端决定,可以让一个适配器类适配多个适配者类(前提条件是适配者类都具有相同的方法名),对象适配模式将适配器与适配者解耦,提高了系统的灵活性,

 

适配器模式的一点思考

适配器模式很好的体现了开闭原则,我们可以通过替换现有类来升级系统,同时不更改现有系统的代码,适配器模式在模式设计与实现上没有给我太多惊艳的感觉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值