设计模式06-适配器模式。
适配器模式的功能很好理解,就是把一个类的接口转换成客户端可以接受的另一个接口,这样两个因为两个接口不匹配而无法协同工作的类就可以协同工作。
适配器的重点是将一个接口的功能转换成另一个接口的功能。
设计模式06-适配器模式(Adapter)
概述
适配器模式的功能很好理解,就是把一个类的接口转换成客户端可以接受的另一个接口,这样两个因为两个接口不匹配而无法协同工作的类就可以协同工作。
适配器的重点是将一个接口的功能转换成另一个接口的功能。
优点
更好的可重用性。
系统需要使用现有的类,但是这类类的接口并不能满足系统的需求。那么通过适配器模式可以更好地重用这些功能。
更好的可扩展性。
实现适配器功能时,可以调用自己开发的函数,这样自然扩展了系统的功能。
缺点
过度使用适配器会使系统非常混乱,整体难以把握。比如接口A被调用是显而易见的,但实际上是内部适配接口b的实现,如果这种情况在一个系统中发生太多,那就是灾难。因此,如果没有必要,可以不使用适配器直接重构系统。
简单实现
JDK实现
1.现有的Source接口及其实现类SourceImpl。
公共接口来源{
void execute();
}
公共类SourceImpl实现了Source {
@覆盖
public void execute(){ 0
}
}
2.现在调用使用目标接口的源接口方法,而不修改与源相关的类。
公共接口目标{
void execute target();
}
3.在目标接口的实现类中调用源实现类的函数有两种适配方式。
第一种方法是通过持有Source实现类对象来调用Source方法。与下面的继承方法相比,建议通过汇编完成对Source接口的适配。
公共类HoldObjectAdapter实现了目标{ 0
私人最终来源来源;
HoldObjectAdapter(来源来源){ 0
super();
this.source=source
}
@覆盖
public void execute target(){ 0
source . execute();
}
}
第二种是通过继承Source实现类来调用Source方法。
公共类ExtendClassAdapter扩展了实现Target的SourceImpl
@覆盖
public void execute target(){ 0
execute();
}
}
源码解析
JDK
java.io.InputStreamReader
公共类InputStreamReader扩展了Reader {
私有最终流解码器SD;
public InputStreamReader(InputStream in){ 0
//.
}
}
InputStreamReader通过保持父类InputStream类型的不同接口或实现,使InputStream适应Reader。
Mybatis Log
org.apache.ibatis.logging.Log
公共接口日志{
//.
}
为了适应各种日志实现类,Mybatis使用适配器模式,将各种日志实现适配到同一个接口日志。
org . Apache . ibatis . logging . log4j 2 . log4j 2 logger impl
//.
import org . Apache . logging . log4j . logger;
公共类Log4j2LoggerImpl实现了日志{
私有静态最终标记=MarkerManager . GetMarker(LogFactory。MARKER);
//这里改编了apache的log4j2日志实现类。
私有最终记录器日志;
公共log4j 2 Logger impl(Logger Logger){ 0
log=logger
}
}
org . Apache . ibatis . logging . slf4j . slf4jloggerimpl
类Slf4jLoggerImpl实现日志{
私有最终记录器日志;
//这里改编了slf4j的日志实现类。
公共Slf4jLoggerImpl(日志记录器){ 0
log=logger
}
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/53727.html