适配器模式

代理 适配 外观

两盒软妹~` 提交于 2019-12-24 02:06:22
一、定义 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口,使得原本接口不兼容而不能一起工作的那些类可以一起工作。 外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 二、理解 代理模式和适配器模式应该说很相像,但是他们的区别也很明显,代理模式和被代理者的接口是同一个,只是使用中客户访问不到被代理者,所以利用代理间接的访问,而适配器模式,是因为接口不同,为了让用户使用到统一的接口,把原先的对象通过适配器让用户统一的使用,大多数运用在代码维护的后期,或者借用第三方库的情况下 ,而外观模式,是大家经常无意中使用的,就是把错综复杂的子系统关系封装起来,然后提供一个简单的接口给客户使用,就类似于一个转接口,可以想象成一个漏斗,中间细的那一段,越细耦合度越低,外观模式就是为了降低耦合度。 三、类图 代理模式 适配器模式 外观模式 四、Code 代理模式,代理者保存一个被代理的一个对象;适配器模式,保存了一个被适配的对象;而外观模式,就保存了各个子系统对象,然后根据实际逻辑组合。 一、定义 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 适配器模式(Adapter)

设计模式(一)适配器模式与外观模式

回眸只為那壹抹淺笑 提交于 2019-12-24 02:05:21
  这两天刚把适配器模式与外观模式学习了一遍,记录一下自己在学习中的思考。 适配器设计模式与外观设计模式所涉及到的一个设计原则:   最少知识原则:不要让太多的类耦合在一起,以免当修改了某一部分后,会影响到其他部分。   对于任何对象而言,在该对象的方法内,其中最少所指的范围:      1. 该对象本身;     2.被当作方法的参数传递进来的对象 ------------------------------------(以上两点比较好理解,完全字面意思)     3. 此方法所创建或实例化的任何对象       即在方法中,通过构造器生成的一个其他类的对象,在方法中使用这个对象是满足最小知识的原则的;       但是,假如在方法中,通过其他类的非构造器方法返回的类对象,根据该原则是不建议去调用此对象的相关方法的。     4. 对象的任何组件       包括对象所处的类的其他方法,属性 一. 适配器模式   在接触Java这门编程语言的时候,看着视频教程,学到过有关适配器模式的相关内容,可是当时自己完全弄不明白(即使到现在,自己依旧有许多不明白的地方),也许是刚接触的原因,经验不足,缺乏实践的学习使得自己在学的时候,总会把许多理念搞混。   说到适配器设计模式,其实分为两类,一种是对象适配器,另一种是类适配器(但Java中这种方式是无法实现的)。搞清楚适配器模式

适配器模式

会有一股神秘感。 提交于 2019-12-21 03:38:53
请选择一种我们课程中介绍的设计模式,用您熟悉的编程语言提供一个典型的应用范例,并分析其代码结构特性。完成一篇研究报告,具体要求如下: 引用关键代码(引用代码是为解释说明服务的,不要贴对解释问题无关的代码)解释该设计模式在该应用场景中的适用性; 引入该设计模式后对系统架构和代码结构带来了哪些好处; 解释其中用到的多态机制; 说明模块抽象封装的方法; 分析各个模块的内聚度和模块之间的耦合度; 提供该应用范例完整的源代码包括构建部署的操作过程,建议以github版本库URL的方式提供源代码,其中README.md中说明构建部署的操作过程。 适配器模式(adapter pattern) 1、定义   将⼀个类的接口转换成客户所希望的另外⼀ 个接口,适配器模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作。适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常所见的转接头,转换器之类的存在。例如,各国使用的电压各不相同,有110V和220V等,但是我们的笔记本却可以直接使用。原因是电源适配器把电源转换成我们所需要的电压。 2、角色    Target(目标抽象类) :目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。   Adapter(适配器类) :适配器可以调用另一个接口,作为一个转换器

Java适配器模式

痞子三分冷 提交于 2019-12-20 17:44:33
适配器模式   适配器模式就是将一个类的接口转换成我们希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能在一起工作的类可以在一起工作。 角色   目标接口(Target):希望的接口。可以是具体的类,或者接口。   需要适配的类(Adaptee):需要适配的类,或者适配者的类。   适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。 Demo: //接口规则 public interface Target {   public void handleReq(); } //适配器,继承接口文档,并且实现对应的方法 public class Adpatee implements Target{   @Override   public void handleReq() {     System.out.println("完成客户端的要求");   } } //接口的具体实现类,同时继承适配器类,这样就可以使用其中的方法,完成适配 public class TargetImpl extends Adpatee implements Target{   @Override   public void handleReq() {     super.handleReq();    } } 客户端调用 public class Client {  

结构型模式-适配器模式

谁都会走 提交于 2019-12-20 11:09:48
1.定义 将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 2.介绍 适配器模式属于结构型模式。 适配器模式有类适配器模式和对象适配器模式这两种。 生活中的手机充电器就是一个适配器的例子,手机一般都是在5V的电压下进行充电,但是外部的电压都是220V,那怎么办,这就需要充电器去适配了,将220V的电压转换为5V。 实际开发中,我们常遇到两个类之间的接口不兼容,但是又不想去改动接口,这可以通过适配器模式来解决这个问题。 3.UML类图 角色说明: Adapter(适配器接口):即目标角色,定义把其他类转换为何种接口,也就是我们期望的接口。 Adaptee(被适配角色):即源角色,一般是已存在的类,需要适配新的接口。 ConcreteAdapter(具体适配器):实现适配器接口,把源角色接口转换为目标角色期望的接口。 4.对象适配器模式实现 首先来说下对象适配器模式的实现方式,就以电压转换为例子。 5.类适配器模式实现 类适配器只要是通过继承源目标类来实现。类适配器模式只要通过继承源目标类来实现,无需持有源目标对象。 两者之间的比较: 类适配器采用了继承的方式来实现;而对象适配器是通过传递对象来实现,这是一种组合的方式。 类适配器由于采用了继承,可以重写父类的方法;对象适配器则不能修改对象本身的方法等。

案例分析:设计模式与代码的结构特性

杀马特。学长 韩版系。学妹 提交于 2019-12-19 00:36:32
一、设计模式 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。它与架构的区别在于设计模式比架构更抽象,是比架构更小的体系结构元素,是从代码层面总结的实现一个模块最优的方法。而常见的设计模式按照范围可以分为类模式和对象模式,按照目的可以分为创建型模式、结构型模式、行为型模式。创建型模式是对象实例化的模式,创建型模式用于解耦对象的实例化过程,包括抽象工厂模式、生成器模式、工厂模式、原型模式、单件模式;结构型模式是把类或对象结合在一起形成一个更大的结构,包括适配器模式(类对象)、组合模式(对象)、装饰模式(对象);行为型模式是描述类和对象如何交互,及划分责任和算法,包括迭代器模式、观察者模式、状态模式。在本篇文章中将采用结构模式中的适配器模式。 二、适配器模式(Adapter) 结构型模式涉及到如何组合类和对象以获得更大的结构,它的类模式采用继承机制来组合接口或者实现。其中的适配器模式是将一个类的接口转化为客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能够在一起工作的类可以一起工作。在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系。 首先已存在一个类和一个接口: public class Adaptee {

结构型模式(一) 适配器模式(Adapter)

妖精的绣舞 提交于 2019-12-18 18:35:25
一、动机(Motivation) 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。 如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口? 二、意图(Intent) 将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 例说Adapter应用 这种实际上是一种委派的调用,本来是发送请求给MyStack,但是MyStack实际上是委派给list去处理。MyStack在这里其实就是Adapter(适配对象),list即是Adaptee(被适配的对象),而IStack就是客户期望的接口。太直接了,没什么可说的。 三、结构(Structure) 适配器有两种结构 1、对象适配器(更常用) 对象适配器使用的是对象组合的方案,它的Adapter和Adaptee的关系是组合关系,即上面例子中MyStack和list是组合关系。 OO中优先使用组合模式,组合模式不适用再考虑继承。因为组合模式更加松耦合,而继承是紧耦合的,父类的任何改动都要导致子类的改动。 上面的例子就是对象适配器。 2、类适配器(不推荐使用) 下面的例子是类适配器。 Adapter继承了ArrayList,也继承了IStack接口

适配器模式

…衆ロ難τιáo~ 提交于 2019-12-18 10:28:20
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> ❓ 何为适配器? 假设,一台电脑需要用电,他的插头是两项插头,但是呢,插座却只有三项插孔的。怎么办?插座就在那里,是不可能改变的。我们总不能为了电脑用个电把整个电脑换了吧?不现实!那我们常用的做法就是买一个转接头,一面是两项插孔,一面是三项插孔。这样就很好的解决了这个问题。 这个生活中常见的场景就是经典的适配器模式的体现。 做个小总结, 适配器模式 就是解决这样一种场景,客户端需要通过一种方式(或者接口规范)去访问或者使用另一个已经存在的接口,但是由于各类原因,没有办法直接去调用。这个时候可以提供一下中间媒介作为适配器对象,在其内部将接口做一下转换,然后客户端就可以顺利的通过访问适配器的方式去访问目标接口了。 适配器模式的实现有两种,就是上面展示的两种,一种是通过 继承 方式,另一种是通过 组合 方式实现的。考虑到Java的单继承特点,加上组合聚合复用设计原则,一般都会采用组合方式实现。 适配器模式的优点也很明显,它使得在不需要修改已有代码的前提下,直接重用现有的类库代码。而且实现起来很简单,也很容易理解。另外对于客户端而言,适配器这种兼容转换不同接口的方式是在其内部实现的,对于客户端而言是完全透明的,客户端无需了解目标接口的细节,只需要按照当前接口的规范去调用即可。 默认适配器 假设现在有一个A接口

【转载】设计模式也可以这么简单

為{幸葍}努か 提交于 2019-12-18 05:43:23
一直想写一篇介绍设计模式的文章,让读者可以很快看完,而且一看就懂,看懂就会用,同时不会将各个模式搞混。自认为本文还是写得不错的😂😂😂,花了不少心思来写这文章和做图,力求让读者真的能看着简单同时有所收获。 设计模式是对大家实际工作中写的各种代码进行高层次抽象的总结,其中最出名的当属 Gang of Four ( GoF ) 的分类了,他们将设计模式分类为 23 种经典的模式,根据用途我们又可以分为三大类,分别为创建型模式、结构型模式和行为型模式。 有一些重要的设计原则在开篇和大家分享下,这些原则将贯通全文: 面向接口编程,而不是面向实现。这个很重要,也是优雅的、可扩展的代码的第一步,这就不需要多说了吧。 职责单一原则。每个类都应该只有一个单一的功能,并且该功能应该由这个类完全封装起来。 对修改关闭,对扩展开放。对修改关闭是说,我们辛辛苦苦加班写出来的代码,该实现的功能和该修复的 bug 都完成了,别人可不能说改就改;对扩展开放就比较好理解了,也就是说在我们写好的代码基础上,很容易实现扩展。 创建型模式比较简单,但是会比较没有意思,结构型和行为型比较有意思。 创建型模式 创建型模式的作用就是创建对象,说到创建一个对象,最熟悉的就是 new 一个对象,然后 set 相关属性。但是,在很多场景下,我们需要给客户端提供更加友好的创建对象的方式,尤其是那种我们定义了类

适配器模式

浪子不回头ぞ 提交于 2019-12-17 20:02:09
旧接口格式和使用者不兼容,中间加一个适配转换接口。比如生活中去香港或国外,电源接口跟国内不同就得需要一个转换器。 应用: 封装旧接口 Vue computed方法 举例一: class Adaptee { constructor ( name ) { this . name = name ; } specificRequest ( ) { return `English: ${ this . name } ` ; } } class Target { constructor ( name ) { this . adaptee = new Adaptee ( name ) ; } request ( ) { let info = this . adaptee . specificRequest ( ) ; return ` ${ info } =》 中文:陈开心` ; } } let target = new Target ( 'happy chen' ) ; let result = target . request ( ) ; console . log ( result ) ; 举例二: ajax ( { url : '/getData' , type : 'Post' , dataType : 'json' , data : { id : 66 } } ) . done (