-- Adapter适配器模式,改变已有类(或外部类)的接口形式
例如:电器之间的电压适配器、不同系统软件的兼容脚本
优缺点:
优点:
- 可以让任何两个没有关联的类一起运行。
- 提高了类的复用。
缺点:
- 提高系统复杂性
Adapter模式官方有两种实现方式:
一、第一种 - 通过继承需要适配的类 (较优)
栗子:
(1)、适配器抽象类
package com.construction.adapter;
/**
* @description: 提供适配器方法
* @author: ziHeng
* @create: 2018-08-10 17:22
**/
public interface AdapterInterface {
void adapterOutput();
}
(2)、被适配对象 - 220V电压
package com.construction.adapter;
/**
* @description: 220V 电压
* @author: ziHeng
* @create: 2018-08-10 16:56
**/
public class Voltage220 {
public void output(){
System.out.println("输出220V电压");
}
}
(3)、适配器 - 降压(通过集成被适配器对象)
package com.construction.adapter.extendAdapter;
import com.construction.adapter.AdapterInterface;
import com.construction.adapter.Voltage220;
/**
* @description: 电压适配器
* @author: ziHeng
* @create: 2018-08-10 16:57
**/
public class ExtendAdapter extends Voltage220 implements AdapterInterface{
@Override
public void adapterOutput() {
//220v
super.output();
System.out.println("----经过适配器后----");
System.out.println("输出110V");
}
}
二、第二种 - 通过委让 - 在适配器建立被适配类的对象引用 (更优、更灵活)
-- 怎么结构那么像代理模式的静态代理呢 ~~ 有点快分不清了
栗子:
(1)、适配器抽象类 (同上)
(2)、被适配对象 - 220V电压 (同上)
(3)、适配器 - 降压(通过引用被适配的对象)
package com.construction.adapter.delegateAdapter;
import com.construction.adapter.AdapterInterface;
import com.construction.adapter.Voltage220;
/**
* @description: 电压适配器
* @author: ziHeng
* @create: 2018-08-10 16:57
**/
public class DelegateAdapter implements AdapterInterface{
private Voltage220 voltage220;
public DelegateAdapter(Voltage220 voltage220) {
this.voltage220 = voltage220;
}
@Override
public void adapterOutput() {
//220v
voltage220.output();
System.out.println("----经过适配器后----");
System.out.println("输出110V");
}
}
调用Test:
package com.construction.adapter;
import com.construction.adapter.delegateAdapter.DelegateAdapter;
import com.construction.adapter.extendAdapter.ExtendAdapter;
/**
* @description: 适配器测试
* @author: ziHeng
* @create: 2018-08-10 16:33
**/
public class AdapterTest {
public static void main(String[] args) {
//1、继承方式
AdapterInterface extendAdapter = new ExtendAdapter();
extendAdapter.adapterOutput();
System.out.println("-----");
//2、委让方式
AdapterInterface delegateAdapter = new DelegateAdapter(new Voltage220());
delegateAdapter.adapterOutput();
}
}