2018.3.25 设计模式之适配器模式详解+例子

设计模式之适配器模式

1.定义/概念

适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。是作为两个不兼容的接口之间的桥梁。这种类型的设计属于结构型模式,它结合了两个独立接口的功能。

2.适配器实现方式

共有两类适配器模式:

(1)对象适配器模式
-- 在这种适配器模式中,适配器容纳一个它包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。
对象适配器”通过组合除了满足“用户期待接口”还降低了代码间的不良耦合。在工作中推荐使用“对象适配”。下面是对象适配器的UML图:

(2)类适配器模式
-- 这种适配器模式下,适配器继承自已实现的类(一般多重继承)。

当客户在接口中定义了他期望的行为时,我们就可以应用适配器模式,提供一个实现该接口的类,并且扩展已有的类,通过创建子类来实现适配。

package com.gult.demo11;

/**
 * 适配者模式----类适配器
 * 手机需要5v电压
 * 
 * @author qichunlin
 *
 */
public class Client {
    public static void main(String[] args) {
        System.out.println("=====类适配器=====");
        Mobile m = new Mobile();
        
        //VoltageAdapter va = new VoltageAdapter();
        m.charging(new VoltageAdapter());
    }
}
package com.gult.demo11;

/**
 * 手机需要5v电压
 * 
 * @author qichunlin
 *
 */
public class Mobile {
    //充电方法
    public void charging(Voltage5 voltage5) {
        if(voltage5.output5V() == 5) {
            System.out.println("电压刚刚好5v,开始充电");
        }else if (voltage5.output5V()>5) {
            System.out.println("电压超过5v,无法进行充电");
        }else {
            System.out.println("电压过低!!");
        }
    }
}
package com.gult.demo11;

/**
 * src类
 * 我们有的是220v电压
 * 
 * @author qichunlin
 *
 */
public class Voltage220 {
    public int output220V() {
        int src = 220;
        System.out.println("我是"+src+"V");
        return src;
    }
}
package com.gult.demo11;

/**
 * dst接口:客户需要的5v电压
 *  需求类
 * @author qichunlin
 *
 */
public interface Voltage5 {
    int output5V();
}
package com.gult.demo11;

/**
 * 完成220v----5v的转变
 * 通过继承src类,实现dst类接口,完成src->dst的适配
 * 
 * @author qichunlin
 *
 */
public class VoltageAdapter extends Voltage220 implements Voltage5{

    @Override
    public int output5V() {
        int src = output220V();
        System.out.println("适配器开始适配电压");
        int dst = src / 47;
        System.out.println("适配完成后输出电压"+dst);
        return dst;
    }

}

4.适配器模式(Adapter Pattern)的适用场景:

系统需要一些特定的接口、对象作为参数输入,而我们所拥有的对象,无法满足这些规定。适配器的作用就是,传入我们所拥有的类(例如220V的电),产生我们所需要的类(5V/2A的电)。

转载于:https://www.cnblogs.com/qichunlin/p/8643418.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值