《设计模式之禅》-适配器模式的扩展

当源角色有多个时,因为java不支持多继承,适配器角色则需要使用类关联的实现方法

目标角色  

public interface Target {
    //目标角色有自己的方法
    public String request1();
    public String request2();
    public String request3();
}

 源角色1

public interface IAdaptee1 {
    public void doSomething1();
}

源角色2

public interface IAdaptee2 {
    public void doSomething2();
}

源角色3

public interface IAdaptee3 {
    public void doSomething3();
}

接口实现

源角色1的实现类

public Class Adaptee1 implement IAdaptee1 {
    public void doSomething1();
}

源角色2的实现类

public Class  Adaptee2 implement IAdaptee2{
    public void doSomething2();
}

源角色3的实现类

public Class Adaptee3 implement IAdaptee3{
    public void doSomething3();
}

适配器角色 (因为是多个源角色,无法指定父类,所以只实现目标角色的接口)

public class Adapter implement Target {
    //源角色对象
    private IAdaptee1  adaptee1 = null; //源角色1
    private IAdaptee2  adaptee2 = null; //源角色2
    private IAdaptee3  adaptee3 = null; //源角色3
    
    //构造函数传递对象
    public Adapter (IAdaptee1  _a1,IAdaptee2 _a2, IAdaptee3 _a3){
        this.adaptee1 = _a1;
       this.adaptee2 = _a2;
       this.adaptee3 = _a3;
    }
    
    public void request1(){
        adaptee1.doSomething();
    }
    
    public void request2(){
        adaptee2.doSomething();
    }
    
    public void request3(){
        adaptee3.doSomething();
    }
}

 场景类

public class Client {
    public static void main(String[] args){
        IAdaptee1  _a1 = new Adaptee1 ();
        IAdaptee1  _a2 = new Adaptee2 ();
        IAdaptee1  _a3 = new Adaptee3 ();
        
        ITarget  target = new Adapter (_a1, _a2 , _a3 );
        target.request1();
        target.request2();
       target.request3();
    }
}

 

这种适配器模式的委托是通过对象层次的关联关系进行委托的,而不是继承关系,这种适配器叫做对象适配器,而之前讲的是通过继承进行的适配,叫做类适配器

对象适配器和类适配器的区别是:类适配器是类间继承,对象适配器是对象的合成关系,也可以说是类的关联关系

由于对象适配器是通过类间的关联关系进行耦合的,因为设计时会比较灵活,比如修补源角色的隐形缺陷,关联其他对象等,而类适配器只能通过覆写源角色的方法进行扩展。在实际项目中,对象适配器使用到的场景相对比较多

最佳实践

适配器模式是一个补偿模式,或者说是一个“补救”模式,它通过把非本系统接口的对象包装成本系统可以接受的对象,从而简化了系统大规模变更的风险

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值