首页 > 其他分享 >适配器模式

适配器模式

时间:2022-10-26 21:24:54浏览次数:36  
标签:适配 适配器 接口 public 模式 void

适配器模式

 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。

该模式的主要优点如下。

  • 客户端通过适配器可以透明地调用目标接口。
  • 复用了现存的类,程序员不需要修改原有代码而重用现有的适配者类。
  • 将目标类和适配者类解耦,解决了目标类和适配者类接口不一致的问题。
  • 在很多业务场景中符合开闭原则。

其缺点是:

    • 适配器编写过程需要结合业务场景全面考虑,可能会增加系统的复杂性。
    • 增加代码阅读难度,降低代码可读性,过多使用适配器会使系统代码变得凌乱。

模式的结构

适配器模式(Adapter)包含以下主要角色。
  1. 目标(Target)接口:当前系统业务所期待的接口,它可以是抽象类或接口。
  2. 适配者(Adaptee)类:它是被访问和适配的现存组件库中的组件接口。
  3. 适配器(Adapter)类:它是一个转换器,通过继承或引用适配者的对象,把适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。

类适配模式

复制代码
package adapter;
//目标接口
interface Target
{
    public void request();
}
//适配者接口
class Adaptee
{
    public void specificRequest()
    {       
        System.out.println("适配者中的业务代码被调用!");
    }
}
//类适配器类
class ClassAdapter extends Adaptee implements Target
{
    public void request()
    {
        specificRequest();
    }
}
//客户端代码
public class ClassAdapterTest
{
    public static void main(String[] args)
    {
        System.out.println("类适配器模式测试:");
        Target target = new ClassAdapter();
        target.request();
    }
}
复制代码

对象适配模式

复制代码
package adapter;
//对象适配器类
class ObjectAdapter implements Target
{
    private Adaptee adaptee;
    public ObjectAdapter(Adaptee adaptee)
    {
        this.adaptee=adaptee;
    }
    public void request()
    {
        adaptee.specificRequest();
    }
}
//客户端代码
public class ObjectAdapterTest
{
    public static void main(String[] args)
    {
        System.out.println("对象适配器模式测试:");
        Adaptee adaptee = new Adaptee();
        Target target = new ObjectAdapter(adaptee);
        target.request();
    }
}
复制代码

接口适配模式

复制代码
public class Client {
    public static void main(String[] args) {
        View view = new ViewAdapter(){
            @Override
            public void see() {
                System.out.println("实现了see方法");
            }
        };
        view.see();
    }
}
interface View{
    void see();
    void watch();
}
abstract class ViewAdapter implements View{
    @Override
    public void see() {
    }
    @Override
    public void watch() {

    }
}
复制代码  

标签:适配,适配器,接口,public,模式,void
From: https://www.cnblogs.com/happy12123/p/16830082.html

相关文章

  • 建造者模式
    建造者模式(生成者模式)指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的......
  • Java设计模式 —— 代理模式
    15代理模式15.1代理模式概述ProxyPattern:给某一个对象提供一个代理或占位符,由代理对象来控制对原对象的访问。代理对象是客户端和目标对象的之前的桥梁,它接收来......
  • Linux LVS-NAT模式的实现
    结构图:环境准备lvs[root@lvs~]#cat/etc/sysconfig/network-scripts/ifcfg-eth0TYPE=EthernetBOOTPROTO=noneNAME=eth0DEVICE=eth0ONBOOT=yesIPADDR=10.0.0.8......
  • PO模式介绍及案例
    概念PO(PageObject)设计模式是一种面向对象(页面对象)的设计模式,将测试对象及单个的测试步骤封装在每个Page对象以page为单位进行管理。优点可以使代码复用降低维护成本......
  • 行为型模式-模板方法模式
    行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,他涉及算法与对象间职责的分配。行为型模式分为......
  • 设计模式的六大原则。简称:SOLID
     原文网址:https://blog.csdn.net/hkduan/article/details/114042869 设计模式的六大原则。简称:SOLID迪米特法则(LawofDemeter):如果两个类之间并不需要直接通信,那么就......
  • 设计模式七(外观模式,享元模式)
    外观模式(FacadePattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂......
  • LSI SAS 2208 阵列卡刷 IT 模式
    1.前言对于需要大容量存储但又没有足够预算费用并且对功能和稳定性有一定要求的情况,FreeNAS(现在改名叫TrueNAS)应该是不二选择。受TrueNAS内核驱动(FreeBSD)的影响,一些品牌......
  • rabbitmq fanout(广播)模式
    配置信息bbitMQ:host:rabbitmq.comport:0000username:0000password:0000topic:amq.fanoutqueueName:icost-betavirtualHost:icost-beta#......
  • React组件设计模式-纯组件,函数组件,高阶组件
    一、组件(1)函数组件如果你想写的组件只包含一个render方法,并且不包含state,那么使用函数组件就会更简单。我们不需要定义一个继承于React.Component的类,我们可以定......