适配器Adapter

news2024/11/28 17:36:06

1.意图:将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
2.结构
类适配器结构图
类适配器结构图
对象适配器结构图
对象适配器结构图
类适配器使用多重继承对一个接口与另一个接口进行匹配。对象适配器依赖于对象组合。
Target定义Client使用的与特定领域相关的接口。
Client与符合Target接口的对象协同。
Adaptee定义一个已经存在的接口,这个接口需要适配。
Adapter对Adaptee的接口与Target接口进行适配。
3.适用性:
想使用一个已经存在的类,而它的接口不符合要求。
想创建一个可以服用的类,该类可以与其它不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
(仅适用于对象Adapter)想使用一个已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。
代码案例
某软件系统中,已设计并实现了用于显示地址信息的类Address,现要求提供基于Dutch语言的地址信息显示接口。为了实现该要求并考虑到以后可能还会出现新的语言的接口,决定采用适配器(Adapter)模式实现该要求。
软件设计师考试2016年上半年下午题第6题

public class Adapter {
    public static void main(String[] args) {
        Address addr = new Address();
        DutchAddressAdapter addrAdapter = new DutchAddressAdapter(addr);
        System.out.println("The DutchAddress \n");
        testDutch(addrAdapter);
    }
    private static void testDutch(DutchAddress addr){
        addr.straat();
        addr.postcode();
        addr.plaats();
    }
}

class Address{
    public void street(){
        System.out.println("Address.street()");
    }
    public void zip(){
        System.out.println("Address.zip()");
    }
    public void city(){
        System.out.println("Address.city()");
    }
}
class DutchAddress{
    public void straat(){
        System.out.println("DutchAddress.straat()");
    }
    public void postcode(){
        System.out.println("DutchAddress.postcode()");
    }
    public void plaats(){
        System.out.println("DutchAddress.plaats()");
    }
}
class DutchAddressAdapter extends DutchAddress{
    private Address address;
    public DutchAddressAdapter(Address addr){
        address = addr;
    }
    public void straat(){
        address.street();
    }
    public void postcode(){
        address.zip();
    }
    public void plaats(){
        address.city();
    }
}

运行结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/142688.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

职场一些办公技能和技巧总结

办公软件Word、Excel、PPT职场一些办公技能和技巧总结一、Word(含 WPS word)1、输入带小方框的对勾 / 叉号法1法2(搜狗输入法)备注:Word、Excel、PPT 职场一些办公技能和技巧总结一、Word(含 WPS word&…

MySQL调优-深入理解MySQL事务隔离级别与锁机制

目录 MySQL调优-深入理解MySQL事务隔离级别与锁机制 概述 事务及其ACID属性 (1) 原子性(Atomicity) (2)一致性(Consistent) (3) 隔离性(Isolation) (4) 持久性(Durable) 原子性和一致性有何区别? 并发事务处理带来的问题 更新丢失(Lost Update)或脏写 脏读&…

Mysql 使用存储过程合并多个表数据

Mysql 使用存储过程合并多个表数据 drop procedure if exists mergeTable; CREATE PROCEDURE mergeTable() BEGIN#定义变量declare temp_table_name varchar(20);declare total int default 0;declare done int default false;#游标数据来源 查询出你想要合并的表名称declar…

分布式锁实现

分布式锁实现一 为什么要使用分布式锁二 分布式锁应该具备哪些条件三 分布式锁的三种实现方式四 基于数据库的实现方式五 基于Redis的实现方式一 为什么要使用分布式锁 我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用…

HCIE-Security:顺利通过,备考心得

备考半年多,终于通过华为HCIE安全,今天把心得贴出来,供大家参考。 我是4月1日开始在机构开始学习安全IE的,报名之后从IA开始学习,学习期间也算勤勤恳恳,每次上课都进行预习和复习,形成自己的笔记…

论文投稿指南——中文核心期刊推荐(大气科学)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

2023-1-5 javaScript

JavaScript基础 javaScript 概念 概念:一门客户端脚本语言 脚本语言:不需要编译,直接就可以被浏览器解析执行了 功能:可以增强用户和heml页面交互的过程可以控制html元素,让页面有一些动态的效果,增强用…

[AHK]腾讯实时股票数据接口

腾讯财经接口获取最新行情以五粮液为例,要获取最新行情,访问数据接口:qt.gtimg.cn/qsz000858返回数据:v_sz000858"51~五 粮 液~000858~27.78~27.60~27.70~417909~190109~227800~27.78~492~27.77~332~27.76~202~27.75~334~27.…

[ERROR] Malformed \uxxxx encoding.报错解决

今天用idea运行完项目。想直接打包的时候,结果打包失败,一直报错 [ERROR] Malformed \uxxxx encoding. 网上查了之后,一直说是,有路径在使用斜杠的时候,使用错误。将"\“换成”/“就好了,但是我配置文…

pb将字符串中的中文和英文(含符号)拆分

//用于将字符串中的中文和英文(含符号)拆分 //uf_split_str_enorcn(as_inputstr) //as_inputstr:导入字符串 long i, li_len, li_lenA as_return_cn = as_return_en = if as_inputstr > then li_len = len(as_inputstr) //带中文长度 li_lenA = lenA…

ICMP隧道-调研笔记

ICMP隧道通信原理与通信特征 https://baijiahao.baidu.com/s?id1652047934643855432&wfrspider&forpc 1.一个正常的 ping每秒最多只会发送两个数据包,而使用ICMP隧道的浏览器在同一时间会产生大量ICMP 数据包 2.ICMP隧道数据包中DATA 往往大于64 比特 3.正…

TC275-11CCU6_PWM_Generation

基础知识 CCU6,Capture/Compare Unit 6捕获/比较单元,是一个专门用于电机控制而设计的16位捕获和比较单元。 CCU6包含多个定时器,将它们的计数值和参考值进行比较,来生成PWM信号。 定时器12(T12)配有三个…

Java并发编程(三)

临界区 临界资源:一次仅允许一个进程使用的资源成为临界资源 临界区:访问临界资源的代码块 竞态条件:多个线程在临界区内执行,由于代码的执行序列不同而导致结果无法预测,称之为发生了竞态条件 一个程序运行多个线…

日志框架之TLog讲解分析

文章目录1 TLog1.1 引言1.2 简介1.3 TLog操作1.3.1 pom.xml1.3.2 替换logback配置项1.3.3 测试1.4 TLog接入方式1.5 TLog的基本原理1.5.1 日志标签1.5.2 TLogContext1.5.3 TLogRPCHandler1.6 第三方框架的适配1.6.1 异步线程1.6.1.1 一般异步线程1.6.1.2 线程池1.6.2 对RPC框架…

应用程序性能瓶颈中的CPU缓存优化

1.前言 在应用程序中会有大量的对变量的操作,在一般情况下不会导致问题,但在多线程操作共享变量时,不当的操作会产生大量的冗余操作,造成性能的浪费。这篇文章主要从编码方式与逻辑策略对变量从CPU寄存器,CPU缓存&…

Redis面试题整理

认识Redis 什么是Redis? 一种基于内存的数据库;在内存中完成对数据的读写操作;读写速度非常快;常用于缓存,消息队列,分布式锁等场景 Redis和Memcached有什么区别? 共同点 都是基于内存的数据库&#x…

PaddleNLP系列课程二:RocketQA、SKEP(属性级情感分析)、通用信息抽取技术UIE

文章目录一、使用RocketQA搭建端到端的问答系统1.1 问答系统介绍1.2 RocketQA1.2.1 检索式QA VS预训练时代QA1.2.2 RocketQA简介1.3 使用RocketQA搭建问答系统1.3.1 安装1.3.2 使用预置模型完成预测1.3.3 搭建问答系统1.3.3.1 使用Faiss搭建自己的问答系统1.3.3.2 使用Jina搭建…

Leecode---141、142环形链表

141 难度 : easy 个人主要思路是, 循环遍历每个节点, 判断该节点此前是否被访问过。 方法一: 时间8ms , 内存 6.8M , func hasCycle(head *ListNode) bool {var val map[*ListNode]*ListNode{}if head nil {return …

l2逐笔接口数据传输延时高吗?

l2逐笔接口数据传输延时高吗?信息服务商的机器部署在交易所机房内,并通过接口直接向用户转发。按照交易所的规定,每个接收用户均需支付成本十几万,使用l2逐笔接口数据做量化是需要一定门槛。但用户端SDK直连的方式,能最…