Java设计模式之适配器模式

本文介绍了Java设计模式中的适配器模式,包括缺省适配器、类适配器和对象适配器三种类型,并通过具体示例展示了每种模式的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java设计模式之适配器模式


前言

适配器模式在我们的开发中接触的比较多的。比如一个很常见的场景,现在有个需求A类要实现B接口,因为B接口里的方法有些我用不到,但是我不得不要重写全部方法,这时候你被逼无奈让你用不到的方法为空;如果这时候出现了个抽象类C,让它实现B接口,然后里面的方法全部重写,再让你的A类实现C类这时候你就可以在不留空方法的前提下选择性的去重写你需要重写的方法,我们把这种模式叫做缺省适配器模式

缺省适配器模式

假设我们需要实现Targer接口

public interface Targer {
        void originProductWork();
        void lastProductWork();
        void otherWork();
}

定义个抽象类实现Target接口

public abstract class AbsProduct implements Targer {
    @Override
    public void originProductWork() {
        // not handler
    }

    @Override
    public void otherWork() {
        System.out.println("some work...");
    }

    @Override
    public void lastProductWork() {
        // not handler
    }
}

具体的类继承该抽象类,重写需要重写的方法

public class OriginProduct extends AbsProduct {
  @Override
  public void originProductWork() {
      super.originProductWork();
      System.out.println("my name is orginProduct....");
  }
}

下面还有两种适配器模式也很常用,类适配器是静态的,对象适配器是动态的相对类适配器更加灵活一点,但是还是要结合自己的业务来选择更适合自己的适配器模式;下面举生活中的例子来看看这2种模式,ps:A厂家现在只有3头的插座,但是现在市场需要一批2头同时支持3头的插座,来看看怎么更好的实现这个业务吧。

类适配器模式

该厂家原先的产品OriginProduct

public class OriginProduct {
public void work() {
    System.out.println("我是最早的产品,我只支持3头的");
}

}

现在市场需要一批2头同时支持3头的插座,我们可以用一个接口来适配新的产品

public interface Targer {
    void originProductWork();
    void lastProductWork(); 
}

最后生成同时支持3头,2头的新产品

public class LastProduct extends 
OriginProduct implements Targer {
    @Override
    public void originProductWork() {
        work();
    }

    @Override
    public void lastProductWork() {
        System.out.println("我是最新的产品,我支持2头啦");
    }
}

对象适配器模式

该模式把旧产品直接包装在新产品里

public interface Targer {
    void originProductWork();
    void lastProductWork();
}

public interface Targer {
    void originProductWork();
    void lastProductWork();
}

public final class LastProduct implements Targer {
    private OriginProduct originProduct;

    public LastProduct(OriginProduct originProduct) {
        this.originProduct = originProduct;
    }

    @Override
    public void originProductWork() {
        if (originProduct != null) {
            originProduct.work();
        }
    }

    @Override
    public void lastProductWork() {
        System.out.println("我是最新的产品,我支持2头啦");
    }
}

如果你觉得不错的话,你还可以看具体的demo哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值