设计模式(结构型设计模式——适配器模式)

本文详细介绍了适配器模式,包括其定义、模式结构以及代码实现。通过实例展示了如何将不兼容的接口转换为客户期望的接口,提高解耦性、透明性和复用性,同时强调了模式的灵活性和扩展性,符合开闭原则。
摘要由CSDN通过智能技术生成

设计模式(结构型设计模式——适配器模式)

适配器模式

定义

  1. 何谓适配器模式?适配器模式就是将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

  2. 在适配器模式中,我们可以定义一个包装类,包装不兼容接口的对象,这个包装类就是适配器,它所包装的对象就是适配者。

  3. 适配器提供给客户需要的接口,适配器的实现就是将客户的请求转换成对适配者的相应的接口的引用。也就是说,当客户调用适配器的方法时,适配器方法内部将调用适配者的方法,客户并不是直接访问适配者的,而是通过调用适配器方法访问适配者。因为适配器可以使互不兼容的类能够“合作愉快”。

模式结构

Target: 目标抽象类
Adapter: 适配器类
Adaptee: 适配者类
Client: 客户类

代码实现

Target 目标抽象类
public interface Car4s {
    Car changeColor(Car car, String color);
}
Adapter 适配器类
对象适配器(采用组合实现方式)
public class CarAdapter implements Car4s {
    CarFactory carFactory;
    public CarAdapter(CarFactory carFactory) {
        this.carFactory = carFactory;
    }
    public Car createCar(){
        return carFactory.createCar();
    }
    public Car changeColor(Car car, String color) {
        if(car == null) return null;
        car.setColor(color);
        return car;
    }
}
Adaptee: 适配者类
工厂模式结合适配器使用
public interface CarFactory {
    Car createCar();
}
public class CarFactoryImplAUDI implements CarFactory {
    public Car createCar() {
        return new Car("白色", "奥迪");
    }
}
public class CarFactoryImplBMW implements CarFactory{
    public Car createCar() {
        return new Car("白色", "宝马");
    }
}
@Getter
@Setter
public class Car {
    private String color;//颜色
    private String band;//品牌

    public Car() {
    }

    public Car(String color, String band) {
        this.color = color;
        this.band = band;
    }
}
测试类
@Slf4j
public class Test {

    public static void main(String[] args){
        CarFactory bmwCar = new CarFactoryImplBMW();
        CarAdapter carAdapter = new CarAdapter(bmwCar);
        Car car = carAdapter.createCar();
        log.info("before change color : {} ", car);// Car(color=白色, band=宝马)
        carAdapter.changeColor(car, "红色");
        log.info("after change color : {} ", car);//Car(color=红色, band=宝马)
    }
}
优点
  1. 将目标类和适配者类解耦,通过使用适配器让不兼容的接口变成了兼容,让客户从实现的接口解耦。

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

  3. 灵活性和扩展性都非常好在不修改原有代码的基础上增加新的适配器类,符合《开闭原则》。

  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值