结构图:
Readme.txt
场景:在软件设计中也可能出现:需要开发的具有某种业务功能的组件在现有的组件库中已经存在,但它们与当前系统的接口规范不兼容,如果重新开发这些组件成本又很高,这时用适配器模式能很好地解决这些问题
定义:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。
该模式的主要优点如下。
客户端通过适配器可以透明地调用目标接口。
复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。
将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。
其缺点是:对类适配器来说,更换适配器的实现过程比较复杂。
package com.xingsfdz.adapter;
/**
*
* @类名称 Target.java
* @类描述 <pre>定义一个标准,让适配器来实现这个接口,实现这个标准</pre>
* @作者 xingsfdz xingsfdz@163.com
* @创建时间 2019年5月9日 下午10:13:21
* @版本 1.00
*
* @修改记录
* <pre>
* 版本 修改人 修改日期 修改内容描述
* ----------------------------------------------
* 1.00 xingsfdz 2019年5月9日
* ----------------------------------------------
* </pre>
*/
public interface Type_C {
public void run();
}
package com.xingsfdz.adapter;
/**
*
* @类名称 Adaptee.java
* @类描述 <pre>适配者:被适配的对象</pre>
* @作者 xingsfdz xingsfdz@163.com
* @创建时间 2019年5月9日 下午10:19:15
* @版本 1.00
*
* @修改记录
* <pre>
* 版本 修改人 修改日期 修改内容描述
* ----------------------------------------------
* 1.00 xingsfdz 2019年5月9日
* ----------------------------------------------
* </pre>
*/
public class Adaptee {
public void Charge(){
System.out.println("做具体的业务逻辑.充电...");
};
}
package com.xingsfdz.adapter;
/**
*
* @类名称 Adapter.java
* @类描述 <pre>适配器:具体去执行接口标准的厂商,可以是很多不同的厂商,但核心都必须实现run方法,另也可以添加一些自己花里胡哨的东西,比如皮肤</pre>
* @作者 xingsfdz xingsfdz@163.com
* @创建时间 2019年5月9日 下午10:21:30
* @版本 1.00
*
* @修改记录
* <pre>
* 版本 修改人 修改日期 修改内容描述
* ----------------------------------------------
* 1.00 xingsfdz 2019年5月9日
* ----------------------------------------------
* </pre>
*/
public class FactoryA extends Adaptee implements Type_C{
@Override
public void run() {
this.Charge();
}
}
package com.xingsfdz.adapter;
/**
*
* @类名称 ClientTest.java
* @类描述 <pre>客户端测试:比如小米手机使用Type-c充电</pre>
* @作者 xingsfdz xingsfdz@163.com
* @创建时间 2019年5月9日 下午10:26:39
* @版本 1.00
*
* @修改记录
* <pre>
* 版本 修改人 修改日期 修改内容描述
* ----------------------------------------------
* 1.00 xingsfdz 2019年5月9日
* ----------------------------------------------
* </pre>
*/
public class XiaomiPH {
public static void main(String [] args) {
System.out.println("客户端开始开始使用Type-c充电");
Type_C mi = new FactoryA();
mi.run();//这样就把电通过Type-c传输到手机了
System.out.println("客户端开始使用Type-c充电完毕");
}
}