标签:author 存在 create 一起 适配 装饰者 一个 socket 实现
适配器模式(Adapter Pattern)是指将一个类的接口转换成客户期望的另一个接口,使原本的接口不兼容的类可以一起工作,属于结构型设计模式。
适配器模式主要有3个角色:
被适配者(Adaptee):适配者即被适配的角色
比如买了一个欧标吹风机,和国内的标准并不匹配。这时,被适配的角色即为国内的插座
适配器(Adapter):适配器可以调用适配者转换为目标接口,即作为一个转换器,将一个不可使用的接口转换为可用的接口
果断的上了某东买了个接口转换器
目标角色(Target):目标角色即为适配器要转换成的目标接口
转换器提供的欧标插孔就是这里我们所说的目标角色或者目标接口
以上文中的欧标插头为例
1、被适配者
/**
* Description : .
*
* @author : laoyeye.net
* @date : Created in 2020/7/25 20:56
*/
public interface ChinaSocket {
void socketByChina();
}
2、被适配者实现
/**
* Description : .
*
* @author : laoyeye.net
* @date : Created in 2020/7/25 21:08
*/
public class ChinaSocketImpl implements ChinaSocket {
@Override
public void socketByChina() {
System.out.println("插入国标电源");
}
}
3、目标接口,欧标电源接口
/**
* Description : .
*
* @author : laoyeye.net
* @date : Created in 2020/7/25 20:56
*/
public interface EuropeSocket {
void socketByEurope();
}
4、适配器,国标转欧标
/**
* Description : .
*
* @author : laoyeye.net
* @date : Created in 2020/7/25 21:00
*/
public class ChinaToEuAdapter implements EuropeSocket {
/**
* 需要适配的接口
*/
private ChinaSocket chinaSocket;
public ChinaToEuAdapter(ChinaSocket chinaSocke) {
this.chinaSocket = chinaSocke;
}
@Override
public void socketByEurope() {
System.out.println("适配器,国标转为欧标");
chinaSocket.socketByChina();
}
}
5、运行实现
/**
* Description : .
*
* @author : zhangzhuo
* @date : Created in 2020/7/25 21:03
*/
public class HairDryer {
/**
* 期望的三项供电接口
*/
private EuropeSocket europeSocket;
public HairDryer(EuropeSocket europeSocket) {
this.europeSocket = europeSocket;
}
public void work() {
europeSocket.socketByEurope();
System.out.println("开始吹头发了");
}
public static void main(String[] args) {
// 国标插座
ChinaSocket chinaSocket = new ChinaSocketImpl();
//适配器转换
ChinaToEuAdapter chinaToEuAdapter = new ChinaToEuAdapter(chinaSocket);
HairDryer hairDryer = new HairDryer(chinaToEuAdapter);
// 工作
hairDryer.work();
}
}
效果:
适配器,国标转为欧标
插入国标电源
开始吹头发了
哇哦,接口成功实现转换,吹风机终于用起来了。
适配器模式我目前工作中其实很少用到,过多的适配器也不利于系统的维护
最后,大家有没有感觉上面那个案例,其实我们上次讲过的装饰者模式也可以实现呢。的确,这两种模式都可以实现类似的效果,但却又有所不同,比如:
装饰者模式适合在不改变原有对象的基础上,将功能附加在对象上,用于扩展一个类的功能。可以动态的组合需要添加的功能。而本文所讲的适配器模式主要适合解决在不改变原有接口的前提下,解决接口不兼容的问题。总得来说两者的区别就在于一个是装饰,一个是来解决接口不兼容的问题,记住这两点,相信在使用上就不会有疑问了
标签:author 存在 create 一起 适配 装饰者 一个 socket 实现
原文地址:https://www.cnblogs.com/laoyeye/p/13378415.html