设计模式之适配器模式Java实现

13 篇文章 0 订阅
13 篇文章 1 订阅

设计模式之适配器模式Java实现

适配器模式(Adapter Pattern)
意图:
将一个类的接口转换客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
分类:
结构型模式


结构型模式(Structural Pattern):
描述如何将类或者对象结合形成一个更大的结构。

别名:
Wrapper–包装器
适用性:

1.你想使用一个已经存在的类,而它的接口不符合你的需求。
1. 你想创建一个可以复用的类,该类可以与其他不相关的类和不可预见的类(那些接口可能不一定兼容的类)协同工作。
2. (仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以及匹配到它们的接口。对象Adapter可以适配它的父类接口。


适配器分为类适配器和对象适配器


类适配器示例:
这里写图片描述

示例代码:

 public interface Voltage5vInterface {
    public void connect5v();
}
public class Voltage220v{
    public void connect220v() {
        System.out.print("接通220v电源,");
    }
}
public class PowerAdapter extends Voltage220v implements Voltage5vInterface{
    @Override
    public void connect5v() {
        connect220v();
        System.out.print("将220v电源转化为5v电源,");
    }
}

public class Phone {
    private Voltage5vInterface voltage5v;
    public Phone(Voltage5vInterface voltage5v){
        this.voltage5v = voltage5v;
    }
    public void charge(){
        voltage5v.connect5v();
        System.out.println("已经接通电源,手机开始充电");
    }
}
public class AdapterPatternDemo {
    public static void main(String[] args) {
        PowerAdapter adapter = new PowerAdapter();
        Phone phone = new Phone(adapter);
        phone.charge();
    }
}

运行结果
接通220v电源,将220v电源转化为5v电源,已经接通电源,手机开始充电



对象适配器示例:
类图
这里写图片描述
示例代码

  public interface Voltage5vInterface {
    public void connect5v();
}
public class Voltage220v{
    public void connect220v() {
        System.out.print("接通220v电源");
    }
}
public class PowerAdapter implements Voltage5vInterface{
    private Voltage220v Voltage220v;
    public PowerAdapter(Voltage220v voltage220v) {
        this.Voltage220v = voltage220v;
    }
    @Override
    public void connect5v() {
        Voltage220v.connect220v();
        System.out.print("将220v电源转化为5v电源");
    }
}
public class Phone {
    private Voltage5vInterface voltage5v;

    public Phone(Voltage5vInterface voltage5v){
        this.voltage5v = voltage5v;
    }

    public void charge(){
        voltage5v.connect5v();
        System.out.println("已经接通电源,手机开始充电");
    }
}

public class AdapterPatternDemo {
    public static void main(String[] args) {
        Voltage220v voltage220v = new Voltage220v();
        PowerAdapter adapter = new PowerAdapter(voltage220v);
        Phone phone = new Phone(adapter);
        phone.charge();

    }
}

运行结果:
接通220v电源将220v电源转化为5v电源已经接通电源,手机开始充电


类图

类图
示例代码:

//接口:电脑接口
public interface ComputerInterface {
      void USB();
}
public class XiaomiPhone {
    public void xiaoMiInterface(){
        System.out.println("小米手机的数据接口");
    }
}
public class SamsungPhone {
    public void samungInterface(){
        System.out.println("三星手机的数据接口");
    }
}
//三星手机数据线适配器
public class SamungDataWireAdapter extends SamsungPhone implements ComputerInterface {
    @Override
    public void USB() {
        System.out.print("使用三星数据线连接");
        super.samungInterface();
    }
}
//小米手机数据线适配器
public class XiaomiDataWireAdapter extends XiaomiPhone implements ComputerInterface {
    @Override
    public void USB() {
        System.out.print("使用小米数据线连接");
        super.xiaoMiInterface();
    }
}

public class AdapterPatternDemo {
    public static void main(String[] args) {
        ComputerInterface computer =new SamungDataWireAdapter();
        computer.USB();
        computer=new XiaomiDataWireAdapter();
        computer.USB();
    }
}

运行结果

使用三星数据线连接三星手机的数据接口
使用小米数据线连接小米手机的数据接口

优先使用(对象)组合,而非(类)继承

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值