Java设计模式之适配器模式

Java设计模式之适配器模式

适配器模式属于结构型模式,适配器模式是将某个类的接口转换成客户端期望的另一个接口表示,主要目的是解决兼容性,让原本因为两个接口不匹配而不能一起工作的两个类可以协同工作。

一、实现适配器模式UML类图

在这里插入图片描述

二、适配器模式的工作原理

(1):将一个类的接口转换成另一个接口,让两个不兼容的接口可以相互兼容。
(2):从客户端看不到被适配者。
(3):用户调用适配器转化出来的接口,适配器调用被适配者的接口。
(4):用户直接得到结果。

三、实现适配器模式的步骤

(1):创建两个不兼容的接口ThreeSocket接口和TwoSocket接口
(2):创建两个接口的实现类ThreeSocketImpl和TwoSocketImpl
(3):创建适配器SocketAdapter用于适配不同的接口

(1)创建两个不兼容的接口ElectricityType 接口和Electricity 接口

/**
 * @author yly
 * @ClassName ThreeSocket
 * @Date 2020/2/20 11:43
 * @Version 1.0
 **/
public interface ElectricityType {
    public void ThreeElectricity(String name);
    public void TwoElectricity(String name);
}
/**
 * @author yly
 * @ClassName TwoSocket
 * @Date 2020/2/20 11:41
 * @Version 1.0
 **/
public interface Electricity {
    public void electricity(String type,String name);
}

(2)创建ElectricityType 接口的实现类ThreeElectricityTypeImpl 和TwoElectricityTypeImpl

/**
 * @author yly
 * @ClassName ThreeSocket
 * @Date 2020/2/20 11:45
 * @Version 1.0
 **/
public class ThreeElectricityTypeImpl implements ElectricityType {
    @Override
    public void ThreeElectricity(String name) {
        System.out.println("ThreeElectricityName:" + name);
    }

    @Override
    public void TwoElectricity(String name) {

    }

}
/**
 * @author yly
 * @ClassName TwoSocket
 * @Date 2020/2/20 11:44
 * @Version 1.0
 **/
public class TwoElectricityTypeImpl implements ElectricityType {

    @Override
    public void ThreeElectricity(String name) {

    }

    @Override
    public void TwoElectricity(String name) {
        System.out.println("TwoElectricityName:" + name);
    }
}

(3)创建适配器SocketAdapter用于适配不同的接口

/**
 * @author yly
 * @ClassName SocketAdapter
 * @Date 2020/2/20 11:47
 * @Version 1.0
 **/
public class SocketAdapter implements Electricity{

    private ElectricityType electricityType;

    public SocketAdapter(String type) {
        if (type.equalsIgnoreCase("TwoSocket")) {
            electricityType = new TwoElectricityTypeImpl();
        } else if (type.equalsIgnoreCase("ThreeSocket")) {
            electricityType = new ThreeElectricityTypeImpl();
        }
    }

    @Override
    public void electricity(String type, String name) {
        if (type.equalsIgnoreCase("TwoSocket")) {
            electricityType.TwoElectricity(type);
        } else if (type.equalsIgnoreCase("ThreeSocket")) {
            electricityType.ThreeElectricity(type);
        }
    }
}

(4)创建实现了 Electricity接口的实体类。

/**
 * @author yly
 * @ClassName ElectricityImpl
 * @Date 2020/2/20 13:26
 * @Version 1.0
 **/
public class ElectricityImpl implements Electricity {

    private SocketAdapter socketAdapter;

    @Override
    public void electricity(String type, String name) {
        if (type.equalsIgnoreCase("OneSocket")){
            System.out.println("ONE SOCKET:"+name);
        } else if (type.equalsIgnoreCase("TwoSocket") || type.equalsIgnoreCase("ThreeSocket")){
            socketAdapter = new SocketAdapter(type);
            socketAdapter.electricity(type, name);
        }else {
            System.out.println("type类型错误:"+type);
        }
    }
}

(5)创建demo用于调用适配器

/**
 * @author yly
 * @ClassName demo
 * @Date 2020/2/20 12:26
 * @Version 1.0
 **/
public class demo {
    public static void main(String[] args) {
        ElectricityImpl electricity = new ElectricityImpl();
        electricity.electricity("OneSocket","红牛");
        electricity.electricity("TwoSocket","红牛");
        electricity.electricity("ThreeSocket","红牛");
        electricity.electricity("FourSocket","红牛");
    }
}

(6)运行结果

ONE SOCKET:红牛
TwoElectricityName:TwoSocket
ThreeElectricityName:ThreeSocket
type类型错误:FourSocket

优点:可以将多个没有关联的类一起运行,提高了类的复用。
缺点:过多使用适配器,会使系统变得零乱,不易把握。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值