适配器模式

Java设计模式:适配器模式

﹥>﹥吖頭↗ 提交于 2019-11-28 16:16:59
绪论 其实很早以前就看过一些关于设计模式的文章,知道这个很重要,为此还写了一些demo,但是在实际开发过程中基本没有使用过。原因:不习惯,不记得,其实更多的是不明白什么情况下可以使用。所以导致自己的代码又臭又长,还会重复的造一些轮子,使代码看起来毫无亮点。 这次学习设计模式,更多的是分析理解,思考以往编程中哪些地方可以用到这些模式,从而可以使以后的自己在开发相同模块时可以使用。 理解 结构型模式。 主要作用:是在新接口和老接口之间进行适配。 优点:解耦、增加类的透明性和复用性、是把2个不同的东西转换到可以正常使用,适配器是去迎合目标对象与源对象。 过多使用,会让系统变得凌乱。 适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。 代码 Computer.java public interface Computer { void readSD ( SDCard sd ) ; } LegionComputer.java public class LegionComputer implements Computer { @Override public void readSD ( SDCard sd ) { if ( sd == null ) { throw new NullPointerException ( "sd card is null" ) ; } sd .

设计模式

纵饮孤独 提交于 2019-11-28 15:30:16
目录 一、创建型模式 1. 单例模式 1.1请手写一个单例 1.2单例模式的优点和应用? 1.3单例模式的缺点 2. 工厂类相关模式 2.1工厂模式、简单工厂模式、抽象工厂模式 2.2工厂模式的优点和应用 2.3工厂模式的不足 3、建造者模式 3.2建造者模式的优点和使用场景 3.3建造者模式的缺点 4、原型模式 4.1原型模式 4.2原型模式的优点和使用场景 4.3原型模式的缺点 二、结构类设计模式 1、适配器模式 1.1适配器模式 1.2适配器模式的优点和使用场景 2、桥接模式 2.1桥接模式 2.2桥梁模式的优点和应用场景 3、 装饰器模式 3.1对装饰器的理解 ,并写出一个计时器记录方法执行性能的装饰器? 3.2装饰器模式的优点和应用场景 3.3装饰器模式的缺点 4、组合模式 4.1组合模式 4.2组合模式的优点和使用场景 4.3组合模式的缺点 5、门面模式 5.1门面模式 5.3门面模式的缺点 6、享元模式 6.1享元模式 6.2享元模式的优点和使用场景 6.3享元模式的缺点 7、代理模式 7.1代理模式 7.2代理模式的优点和使用场景 7.3代理模式的缺点 三、行为类设计模式 1、策略模式 1.1策略模式 1.2策略模式的优点和应用场景 1.3策略模式的缺点 2、责任链模式 2.1责任链模式 2.2责任链模式的优点和应用场景 2.3责任链模式的缺点 3、 命令模式 3

设计模式简介及常用应用场景

有些话、适合烂在心里 提交于 2019-11-28 12:48:42
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。 常用应用场景: 工厂模式 :IOC就是典型的工厂模式 代理模式 :AOP就是代理实现的 Facade模式 :shiro框架的核心 单例模式 Spring默认就是单例 不变模式 string 八大基本数据类型都是单例 Future 模式 异步调用。即请求时只拿到一个契约,约定以后可以获取这个东西 来源: https://www.cnblogs.com/duguangming/p/11407721.html

适配器模式

笑着哭i 提交于 2019-11-28 05:11:55
转载自https://www.cnblogs.com/V1haoge/p/6479118.html 适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,简单点理解就是平常所见的转接头,转换器之类的存在。   适配器模式有两种:类适配器、对象适配器、接口适配器   前二者在实现上有些许区别,作用一样,第三个接口适配器差别较大。 1、类适配器模式:   原理:通过继承来实现适配器功能。   当我们要访问的接口A中没有我们想要的方法 ,却在另一个接口B中发现了合适的方法,我们又不能改变访问接口A,在这种情况下,我们可以定义一个适配器p来进行中转,这个适配器p要实现我们访问的接口A,这样我们就能继续访问当前接口A中的方法(虽然它目前不是我们的菜),然后再继承接口B的实现类BB,这样我们可以在适配器P中访问接口B的方法了,这时我们在适配器P中的接口A方法中直接引用BB中的合适方法,这样就完成了一个简单的类适配器。   详见下方实例:我们以ps2与usb的转接为例 ps2接口:Ps2 1 public interface Ps2 { 2 void isPs2(); 3 } USB接口:Usb 1 public interface Usb { 2 void isUsb(); 3 } USB接口实现类:Usber 1 public class Usber

适配器模式

流过昼夜 提交于 2019-11-28 00:38:34
一、适配器模式 先说说什么是适配器。其实生活中有很多例子。比如2008年的时候买了一台Macbook,有一次做课程设计的时候在课堂上做演示汇报,需要连教室的投影仪。上去的时候突然发现,晕,Macbook的投影接口和教室投影仪的接口根本就对不上,顿时石化。。。后来赶紧去网上查了一下,发现Macbook的投影接口与其他品牌的PC是不一样的,需要另外花钱买一个转接器,还好有淘宝,最后花了差不多20大洋终于搞定。这里说的转接器其实就是一个所谓的适配器。它承担着让不同接口之间实现协同工作的功能。家里的水管和各种各样的水龙头之间很多时候不能直接接上,中间也许要一些其他的管子、零件什么的在中间。这些管子往往两头口子大小是不一样的。 上面的例子只是为了方便理解,可能并不那么准确,那下面我们说说适配器模式的定义:Convert the interface of a class into another interface clients expect。适配器模式能让原本互相接口不能匹配的类变得能够一起工作。也就是说,适配器将一个类的接口变成客户端所期望的另外一个接口。 适配器模式有两种类型:类的适配器模式和对象的适配器模式。 类的适配器模式比较通用的类图如图所示: 如图所示,适配器Adapter将被适配的对象的接口转换成客户端需要的Target所规定的接口。通过适配器

适配器模式

℡╲_俬逩灬. 提交于 2019-11-28 00:38:14
姓名:赵汉青 学号:07770201 模式名称:适配器模式 1.问题描述 生活场景:日常生活中,我们所使用的电器,比如:手机,笔记本电脑,剃须刀等在充电时所需要的电压,均不是我国提供的统一民用电压“220v”,而我们又只能使用已经存在的电压给电器充电,这时,就需要一个电源适配,把220V的电压转化为电器所需的电压值。 设计目标:实现对不能满足新化境的“已存对象”的转化,使“已存对象”满足新的环境。 2.不假思索的思路 :提供符合电器规格的电压以适应电器的要求。 设计类图: 代码: public class Power //普通电压类 Note:在“不假思索的思路”中,没用到此类 { public void GetPower220() { Console.WriteLine("普通的220v的电压"); } } public class PowerOfComputer //计算机所需的电压类 { public void GetComputerPower() { Console.WriteLine("计算机所需的电压"); } } static void Main(string[] args) //相当于计算机 public class Computer { Console.WriteLine("计算机:"); PowerOfComputer poc = new

适配器模式

偶尔善良 提交于 2019-11-28 00:37:58
摘要 本文以C#示例说明适配器模式的概念和应用场景。 定义 适配器模式( adapter Pattern , 有时又被称为包装样式或者包装(wrapper), 是软件设计模式的一种。在此种模式中,将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类能在一起工作,做法是将自己的接口包裹在一个已存在的类中。 维基百科 解读 关键词:适配; 使得原本由于接口不兼容而不能在一起工作的类可以一起工作; 符合开闭原则; 应用场景: 对接类库(接口);项目重构背景下的新老接口对接; 适配器模式解决的是正在服役的项目中存在的问题; 对于正在开发的新项目,如非必要,不要使用适配器模式,条件允许的情况下请重构; 项目中过多的适配器模式的应用,会让系统变得凌乱不堪,难以把握; 在GoF的设计模式中, 适配器模式分为两种类型, 类适配器模式和对象适配器模式。 由于类适配器模式通过多重继承对一个接口与另一个接口进行匹配,而C#,Java等语言都不支持多重继承,因而这里只介绍对象适配器。 现实生活中的场景 翻译工作 笔记本电源 在Linux系统中运行Windows程序 ... 思考 和 外观模式 的区别 下面用代码示例进行说明: 代码示例 ORM包装 假设数据库ORM有一个Get方法专门用于根据传入的SQL语句获取DataTable,而且此方法所在的Class不允许修改

适配器模式

只谈情不闲聊 提交于 2019-11-28 00:37:40
  今天小小温习了一下适配器模式,就兴致勃勃写下这篇博文了,在讲适配器模式之前必须先说几个概念。   结构型模式:     描述的是如何将类或者对象结合起来,形成更加强大的结构。这个模式分为两种:类结构型模式和对象结构型模式。     类结构型模式:       这个模式关心的是类之间的组合,通过类与类之间的关系形成更加强大的结构,通常都是通过继承和实现关系来达到。必须说明的是,这个模式会导致类与类之间的耦合程度加大,不利于维护。     对象结构型模式:       这个模式关心的是类和对象之间的组合,通过在一个类中定义另外一个类的对象,这个两者就关系起来,就可以在类中使用另外一个类的实例,调用它的方法,这个模式耦合度不大,是大家都推荐使用的模式。   现在我们来看看什么是适配器模式?   适配器模式:     将一个接口转换成用户希望使用的接口,使不兼容的类可以一起工作。   从这个概念一读,可能模模糊糊。我们打个比方吧,例如你的电脑的USB插口是3.0的,但是你的手机的USB线是2.5的,怎么办呢,难道要将手机的USB接口改成3.0吗,不用,这时候我们就可以使用接口转换器,将2.5的转成3.0的就OK了。这里我们就利用适配器模式,接口的转换器就是一个适配器,将两个不能兼容的东西有效的一起工作,而且是不破坏里面的结构。                   

适配器模式

天大地大妈咪最大 提交于 2019-11-28 00:36:59
一、生活中的扳手   假设我们在平时的工作中一直用12mm的扳手,如下图所示:    突然有一天,我们要操作24mm的螺丝.... 这时,我们会想到三种解决方案: 1,再重新采购一个24mm的扳手,以适应新的需求 2,让对方的厂家螺丝变小,由24mm变为12mm以适应我们的扳手....这个解决方案看起来相当扯淡... 3,增加一个12mm与24mm的“扳手适配器”..把这个适配器“套在”我们已有的12mm扳手上,以使用这个适配器的另一端的24mm的接口。 基于我们可控制的条件来考虑,让产商把所有的24mm螺丝改成12mm的螺丝是不可能的,所以我们只能在第一种和第二种方案中来选择解决方案,然后我们再从成本上分析[在软件中主要指人力成本,应对需求变化时所花费的成本],方案一固然也可以解决问题,但是一个新的扳手价格在45元左右,同样,如果采用了方案3,一个“扳手适配器”也能解决我们的问题,但成本只有10元左右,从倍数的角度来看,我们解决同样的问题,方案3相比方案1节省了3倍左右的金钱。 二、程序中的扳手 1,12mm扳手正常工作的情况下: 1 /// <summary> 2 /// 12mm的螺丝 3 /// </summary> 4 public class Screws_12mm 5 { 6 public string Turn() 7 { 8 return "12mm的螺丝在转动.

java设计模式----适配器模式

半腔热情 提交于 2019-11-27 23:53:05
有时候我们需要将一些不兼容的接口转换成可兼容的接口,这时候需要用到适配器模式。最简单的应用场景就是平时手机充电插头不兼容需要使用一个适配器来使得手机可以充电。 举个例子,手机在中国可以充电,在德国由于标准不一样则需要用适配器才能给手机充电,德国使用的是圆口插口供电,中国使用的是三项扁头插口供电。 所以,先写两个充电标准接口。并写出其实现类 DBSocketInterface.java:德标接口 package adapter; /** * 德标接口 */ public interface DBSocketInterface { /** * 这个方法的名字叫做:使用两项圆头的插口供电 */ void powerWithTwoRound(); } DBSocket.java:实现充电功能 package adapter; /** * 德国插座 */ public class DBSocket implements DBSocketInterface { public void powerWithTwoRound() { System.out.println("使用两项圆头的插孔供电"); } } GBSocketInterface.java:国标接口 package adapter; /** * 国标接口 */ public interface GBSocketInterface {