适配器模式

java常用的设计模式学习笔记

一笑奈何 提交于 2019-11-30 21:02:35
资料来源于GoF 1. 根据目的来分 根据模式是用来完成什么工作来划分,这种方式可分为创建型模式、结构型模式和行为型模式 3 种。 创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF 中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。 结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式。 行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及怎样分配职责。GoF 中提供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器等 11 种行为型模式。 2. 根据作用范围来分 根据模式是主要用于类上还是主要用于对象上来分,这种方式可分为类模式和对象模式两种。 类模式:用于处理类与子类之间的关系,这些关系通过继承来建立,是静态的,在编译时刻便确定下来了。GoF中的工厂方法、(类)适配器、模板方法、解释器属于该模式。 对象模式:用于处理对象之间的关系,这些关系可以通过组合或聚合来实现,在运行时刻是可以变化的,更具动态性。GoF 中除了以上 4 种,其他的都是对象模式。 来源: https://www.cnblogs.com/codecola/p/11640027.html

设计模式--适配器模式

久未见 提交于 2019-11-30 15:14:05
一 适配器模式总结 适配器模式是设计模式三大类中结构性模式的基础模式,结构性模式的其几种都可以说是适配器模式的延申。 适配器模式分为3种: 类适配器 对象适配器 接口适配器(默认适配器) 优点: 1.将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无须修改原有结构。 2.增加了类的透明性和复用性,将具体的业务实现过程封装在适配者类中,对于客户端类而言是透明的,而且提高了适配者的复用性,同一个适配者类可以在多个不同的系统中复用。 3.灵活性和扩展性都非常好,通过使用配置文件,可以很方便地更换适配器,也可以在不修改原有代码的基础上增加新的适配器类,完全符合“开闭原则”。 类适配器模式优点: 由于适配器类是适配者类的子类,因此可以在适配器类中置换一些适配者的方法,使得适配器的灵活性更强。 对象适配器模式优点: 一个对象适配器可以把多个不同的适配者适配到同一个目标; 可以适配一个适配者的子类,由于适配器和适配者之间是关联关系,根据“里氏代换原则”,适配者的子类也可通过该适配器进行适配。 类适配器模式缺点: 对于Java、C#等不支持多重类继承的语言,一次最多只能适配一个适配者类,不能同时适配多个适配者; 适配者类不能为最终类,如在Java中不能为final类,C#中不能为sealed类; 在Java、C#等语言中,类适配器模式中的目标抽象类只能为接口,不能为类

java设计模式-适配器模式

杀马特。学长 韩版系。学妹 提交于 2019-11-30 15:13:43
java设计模式-适配器模式 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 适配器我们可以第一个想到的就是电源适配器,将不相容的接口通过适配器连起来。先来看一下类图,图片来自 适配器模式-百度百科 举个例子,适配器就像读卡器,原本存储卡没办法直接让电脑读取,所以要经过一个读卡器。存储卡和电脑是本来就存在的,所以我们主要来看看读卡器(适配器)是怎么实现的。首先,读卡器要能与sd卡连接,所以读卡器里面要维护sd卡对象,其次,读卡器要与电脑的usb口连接,原本电脑里面要维护一个读卡器对象,但是现在不想修改原有的代码,所以这里可以让读卡器直接继承电脑类,读卡器重写的方法来实现读取sd卡。下面看看代码: StorageCard.java public class StorageCard { public void readSD ( ) { System . out . println ( "读取sd中的内容" ) ; } } Computer.java public class Computer { public void readUSB ( ) { System . out . println ( "读取USB的内容" ) ; } } SDAdapter.java public class

设计模式-适配器模式-结构型

本小妞迷上赌 提交于 2019-11-30 15:11:20
定义: 把一个类的接口转换成客户所期待的另一种接口,从而使不兼容的那些类可以一起工作 类型: 结构型 理解: 提供一个中间层,将一个对象的接口转换成所需要的接口,而不改变原有的类; 比如生活中的电源适配器可以将生活用电的220v电压转换成电器所需要的电压,Android中常见的Adapter可以将不同类型的数据、不同的布局视图绑定到ListView 适配器模式分为两种:类适配器模式和对象适配器模式;他们实现的方式不一样,前者通过继承关系实现,而后者则是通过关联关系实现 /** * 家庭用电电压 */ open class HomeVoltage { fun getHomeVoltage ( ) : Int { return 220 } } /** * 手机电源需要的5v电压 */ interface MobilePhoneVoltage { fun getMobilePhoneVoltage ( ) : Int } /** * 电压适配器-类适配器 */ class VoltageClassAdapter : HomeVoltage ( ) , MobilePhoneVoltage { override fun getMobilePhoneVoltage ( ) : Int { return getHomeVoltage ( ) / 44 } } /** * 电压适配器-对象适配器

适配器模式

妖精的绣舞 提交于 2019-11-30 15:11:18
适配器模式简介 在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器等。 在软件设计中也可能出现:需要开发的具有某种业务功能的组件在现有的组件库中已经存在,但它们与当前系统的接口规范不兼容,如果重新开发这些组件成本又很高,这时用适配器模式能很好地解决这些问题。 适配器模式属于结构型模式 适配器模式涉及3个角色: 源(Adaptee) :需要被适配的对象或类型,相当于插头。 适配器(Adapter) :连接目标和源的中间对象,相当于插头转换器。 目标(Target) :期待得到的目标,相当于插座。 主要可以分为 类适配器 对象适配器 接口适配器 适配器模式应用实例 以生活中充电器的例子来讲解适配器,充电器本身相当于Adapter,220V交流电 相当于src (即被适配者),我们的目dst(即 目标)是5V直流电 类适配器: //被适配的类 public class Voltage220V { //输出220V的电压 public int output220V() { int src = 220; System.out.println("电压=" + src + "伏"); return src;

结构设计模式 - 适配器设计模式

瘦欲@ 提交于 2019-11-30 15:09:35
结构设计模式 - 适配器设计模式 适配器设计模式是结构设计模式之一,其使用使得两个不相关的接口可以一起工作。连接这些不相关接口的对象称为适配器。 目录 1 适配器设计模式 1.1 双向适配器模式 1.2 适配器设计模式 - 类适配器 1.3 适配器设计模式 - 对象适配器实现 1.4 适配器设计模式类图 1.5 JDK 中的适配器设计模式示例 适配器设计模式 适配器设计模式,java 中的适配器设计模式,适配器模式,适配器模式 java 示例 适配器设计模式的一个重要现实例子是移动充电器。移动电池需要 3 伏充电才能充电,但普通插座需要 120V(美国)或 240V(印度)。因此,移动充电器可作为移动充电插座和墙壁插座之间的适配器。 我们将尝试使用本教程中的适配器设计模式实现多适配器。 首先,我们将有两个类 - Volt(测量电压)和 Socket(产生 120V 的恒定电压)。 package com.journaldev.design.adapter; public class Volt { private int volts; public Volt(int v){ this.volts=v; } public int getVolts() { return volts; } public void setVolts(int volts) { this.volts =

23种设计模式----适配器模式----结构模式

可紊 提交于 2019-11-30 15:09:17
文章目录 适配器模式 1.适配器模式介绍 2.适配器模式角色 3.适配器模式的实现 需求 现有 工具类 3.1继承方式实现适配器 3.2组合的方式 3.3适配器模式实现扩展 3.4文档结构及名称 3.5总结 4.适配器模式的使用 4.1使用适配器可以在不更改原有类的基础上增加新类,这样出现bug也是在新类中,比在原有类的基础上修改好的多。 4.2修改原有类需要对原有类进行测试,如果只是改动比较小,但是测试比较麻烦的类,使用适配器的代价小的多。 4.3版本升级,新版本兼容旧版本。 23种设计模式 适配器模式 1.适配器模式介绍 引入:显示生活中,有许许多多的的电器在被使用,但是我们普通家用电线的电压是220V(一般)。但是家里的电器却又很多种: 手机充电:5V 手电筒:12V、5V 电视机:220V 笔记本:12V (电器电压不一定正确) 。。。。。。。。 那么,为什么只提供一种电压却满足了这么不同电压需求的电器。 原因就是每一种电器都有各自的电压转换器(变压器),笔记本是充电适配器(外)电视机(内)手机充电头(电源适配器) 所以,生活中处处可见各种各样的适配器。 在程序世界中,经常会存在有的程序无法直接使用,需要做适当的变换之后才能使用的情形(源自《图解设计模式》)。适配器模式就是连接“现有程序”和“目标程序”的中间程序。 2.适配器模式角色 通俗的理解: 需求-Target

设计模式-结构型- 适配器模式(Adapter)

让人想犯罪 __ 提交于 2019-11-30 15:08:51
定义 将一个类的接口转换成客户希望的另一个接口 角色 目标接口(Target): 定义客户端使用的与特定领域相关的接口 需要适配的类(Adaptee): 定义一个已经存在的接口,这个接口需要适配 适配器(Adapter): 对Adaptee的接口与Target接口进行适配 优点 客户端可以调用同一接口,因而对客户端来说是透明的, 这样做更简单、更直接、更紧凑 复用了现存的类 通过引入一个适配器重用现有的Adaptee类,将目标类与Adaptee类解耦 缺点 更换适配器的实现过程比较复杂 适用场景 想使用一个已经存在的类, 但它的接口不符合你的需求 想创建一个可以复用的类,该类可以与其它不相关的类协同工作 两个类所做的事情相似,但是具有不同接口时 类图 package com.vapy.structure.Adapter; /** * * @author vapy 2016年8月28日 * */ public interface Target { void adapteeMethod(); void adapterMethod(); } package com.vapy.structure.Adapter; /** * * @author vapy 2016年8月28日 * */ public class Adaptee { public void adapteeMethod ()

设计模式-适配器模式

二次信任 提交于 2019-11-30 15:06:51
设计模式-适配器模式 介绍 意图: 主要解决: 何时使用: 如何解决: 关键代码: 应用实例: 优点: 缺点: 实例 适配器的权衡 缺省适配模式的结构 介绍 结构型模式是将系统中的多个类或对象组合在一起,相互协作来完成更复杂的任务或功能。就好比搭积木,许多简单积木可以搭建成更复杂、功能更强大的结构。它分为两种形式:类结构型模式和对象结构型模式。类结构型模式由多个类组合,存在继承和实现关系;对象结构型模式由类和对象组合,存在关联关系(比如车和轮胎的关系)。 意图: 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 主要解决: 主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。 何时使用: 系统需要使用现有的类,而此类的接口不符合系统的需要。 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。 通过接口转换,将一个类插入另一个类系中。(比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。) 如何解决: 继承或依赖(推荐)。 关键代码: 适配器继承或依赖已有的对象,实现想要的目标接口。 应用实例: 美国电器 110V,中国 220V

适配器模式

£可爱£侵袭症+ 提交于 2019-11-30 12:57:05
将一个类的接口转换成客户希望的另外一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 新类继承了RedisHelper,但是如果RedisHelper中有我们不想要的方法,也必须继承。此处RedisHelper是接口。 /// <summary> /// 类适配器:新建的对象需要继承接口 /// </summary> public class RedisHelperInherit : ReidsHelper, IHelper { /// <summary> /// 对新增的Redis进行实现 /// </summary> /// <typeparam name="T"></typeparam> public void Add<T>() { base.AddRedis(); } public void Del<T>() { base.DelRedis(); } public void Update<T>() { base.UpdateRedis(); } public void Query<T>() { base.QueryRedis(); } } /// <summary> /// 对象适配器模式,当我的数据库发生变化的时候(此处新增Redis),但是对象中的方法名称和Sql中的方法名称不一样,之前在IHelper中声明的接口在Redis中不存在 ///