Java - 适配器模式

-- 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();
        
    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值