Java23中设计模式(课时六)适配器模式

简介: Java23中设计模式(课时六)适配器模式

基本信息

共有两类适配器模式:

对象适配器模式

-- 在这种适配器模式中,适配器容纳一个它包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体

类适配器模式

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


解释

将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。


基本概念

客户:需要调用我们的代码的对象。

Adapter模式的宗旨:保留现有类所提供的服务,向客户提供接口,以满足客户的期望。


主要内容

(1)类适配器:

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

下面是类适配器的UML图:


(2)对象适配器:

对象适配器”通过组合除了满足“用户期待接口”还降低了代码间的不良耦合。在工作中推荐使用“对象适配”。下面是对象适配器的UML图:


(3) 缺省适配器模式

缺省适配器模式是一种特殊的适配器模式,但这个适配器是由一个抽象类实现的,并且在抽象类中要实现目标接口中所规定的所有方法,但很多方法的实现都是“平庸”的实现,也就是说,这些方法都是空方法。而具体的子类都要继承此抽象类。 [2]


案例总共有两种方案:

方案一

package coms.Design.Mode.adaptee;
/**
 * 实现接口
 * 处理请求
 */
public interface NetToUsb {
    public  void  handleRequest();
}
package coms.Design.Mode.adaptee;
/**
 * 适配器模式
 * 将一个接口
 */
public class Adaptee {
    public  void  request(){
        System.out.println("开始在电脑上连线开始上网");
    }
}
package coms.Design.Mode.adaptee;
/**
 * 电脑   适配器  网线
 * 1 继承
 * 2 组合
 */
public class Adapter  extends Adaptee implements  NetToUsb{
    @Override
    public void handleRequest() {
        super.request();//可以上网了
    }
}

public class Adapter  extends Adaptee implements  NetToUsb

package coms.Design.Mode.adaptee;
/**
 * 电脑 想上网
 */
public class Computer {
    public  void net(NetToUsb adapter){
        //要有转接头
        // 上网具体的实现类 找个转接头
        adapter.handleRequest();
    }
    public static void main(String[] args) {
        //电脑  适配器  网线
        Computer computer = new Computer();  //电脑
        Adaptee adaptee = new Adaptee();  //网线
//        Adapter adapter = new Adapter();  //转接器
        Adapter2  adapter = new Adapter2(adaptee);
        computer.net(adapter);
//        computer.net(adapter);
    }
}


方案二 在方案一的基础上改进

package coms.Design.Mode.adaptee;
/**
 * 电脑   适配器  网线
 * 1 继承
 * 2 组合
 */
public class Adapter2 implements  NetToUsb{
    /**
     *  将类注入Adaptee adaptee
     */
    private Adaptee adaptee;
    public Adapter2(Adaptee adaptee) {
        this.adaptee = adaptee;
    }
    @Override
    public void handleRequest() {
        adaptee.request();//可以上网了
    }
}
package coms.Design.Mode.adaptee;
/**
 * 电脑 想上网
 */
public class Computer {
    public  void net(NetToUsb adapter){
        //要有转接头
        // 上网具体的实现类 找个转接头
        adapter.handleRequest();
    }
    public static void main(String[] args) {
        //电脑  适配器  网线
        Computer computer = new Computer();  //电脑
        Adaptee adaptee = new Adaptee();  //网线
//        Adapter adapter = new Adapter();  //转接器
        Adapter2  adapter = new Adapter2(adaptee);
        computer.net(adapter);
//        computer.net(adapter);
    }
}

案例:

A  说中文

B  说中文 英文

C  说 英文

A可以跟B交流,B可以跟C交流:A如何跟C交流?

A转话给B  B转话给C 在这个过程 B是适配器

                   

相关文章
|
25天前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
40 0
[Java]23种设计模式
|
9天前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
1月前
|
设计模式 监控 算法
Java设计模式梳理:行为型模式(策略,观察者等)
本文详细介绍了Java设计模式中的行为型模式,包括策略模式、观察者模式、责任链模式、模板方法模式和状态模式。通过具体示例代码,深入浅出地讲解了每种模式的应用场景与实现方式。例如,策略模式通过定义一系列算法让客户端在运行时选择所需算法;观察者模式则让多个观察者对象同时监听某一个主题对象,实现松耦合的消息传递机制。此外,还探讨了这些模式与实际开发中的联系,帮助读者更好地理解和应用设计模式,提升代码质量。
Java设计模式梳理:行为型模式(策略,观察者等)
|
2月前
|
存储 设计模式 安全
Java设计模式-备忘录模式(23)
Java设计模式-备忘录模式(23)
|
2月前
|
设计模式 存储 算法
Java设计模式-命令模式(16)
Java设计模式-命令模式(16)
|
2月前
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
|
2月前
|
设计模式 安全 Java
Java设计模式-迭代器模式(21)
Java设计模式-迭代器模式(21)
|
2月前
|
设计模式 缓存 监控
Java设计模式-责任链模式(17)
Java设计模式-责任链模式(17)
|
2月前
|
设计模式 运维 算法
Java设计模式-策略模式(15)
Java设计模式-策略模式(15)
|
1月前
|
设计模式 Java
Java设计模式
Java设计模式
28 0