1.模式定义: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 2.模式特点:  Adapter模式使原本因接口不匹配(或者不兼容)而无法在一起工作的两个类能够在一起工作.又称为转换器模式.变压器模式.包装(Wrapper)器模式(把已有的一些类包装起来,使之能有满足需要的接口). (1) 适配器对象实现原有接口 (2)适配器对象组合一个实现新接口的对象(这个对象也可以不实现一个接口,只是一个单纯的对象) (3)对适配器原有…
1. 概述: 接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题.程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化.  例子1:iphone4,你即可以使用UBS接口连接电脑来充电,假如只有iphone没有电脑,怎么办呢?苹果提供了iphone电源适配器.可以使用这个电源适配器充电.这个iphone的电源适配器就是类似我们说的适配器模式.(电源适配器就是把电源变成需要的电压,也就是适配器的作用是使得一个东西适合另外一个东西.)  例子2:最典型的例…
适配器模式(Adapter Pattern) ——.NET设计模式系列之八 Terrylee,2006年2月 概述 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的.那么如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?这就是本文要说的Adapter 模式. 意图 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可…
  设计模式(五)适配器模式Adapter(结构型) 1. 概述: 接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题.程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化.  例子1:iphone4,你即可以使用UBS接口连接电脑来充电,假如只有iphone没有电脑,怎么办呢?苹果提供了iphone电源适配器.可以使用这个电源适配器充电.这个iphone的电源适配器就是类似我们说的适配器模式.(电源适配器就是把电源变成需要的电压,也就是适配器的作用是…
参考链接:http://www.cnblogs.com/zhili/p/AdapterPattern.html一.定义:将一个类的接口转换成客户希望的另一个接口.Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作.适配器模式有类的适配器模式和对象的适配器模式两种形式. 二.类的适配器模式实现(不推荐,违反了类的单一职责原则) using System; /// 这里以插座和插头的例子来诠释适配器模式 /// 现在我们买的电器插头是2个孔,但是我们买的插座只有3个孔的 /…
一.适配器模式 适配器模式的主要作用是在新接口和老接口之间进行适配.将一个类的接口转换成客户端期望的另外一个接口.其实适配器模式有点无赖之举,在前期设计的时候,我们就不应该考虑适配器模式,而应该通过重构统一接口. 二.适配器模式分为类适配器模式和对象适配器模式 类适配器模式:适配器使用多重继承对一个接口与另外一个接口进行匹配. 对象适配器模式:适配器在新接口中利用已有类的实例来实现接口的匹配. 三.UML图 类适配器模式 对象适配器模式 四.示例 类适配器模式 package com.visio…
一.概述 概念 其实,举个生活中的例子的话,适配器模式可以类比转接头,比如typeC和USB的转接头,把原本只能接typeC的接口,拓展为可以接普通USB:这里的转接头一方面需要查在typeC上,一方面需要作为USB插口. 如果要举个Java中的例子的话,不妨看看JDBC的章节介绍!下图为JDBC简略UML图(中间的xxx JDBC就是我们适配JDBC与各大数据库厂商的适配器了!) 简略图 类的适配器模式 对象的适配器模式(注意看类的关系,上面是继承,下面是委派) 二.实践 上面提到的转接头的例…
1 基础知识 定义:将一个类的接口(被适配者)转换成客户期望的另一个接口(目标).特征:使原本接口不兼容的类可以一起工作. 本质:转换匹配,复用功能.把不兼容的接口转换为客户端期望的样子从而实现功能的复用. 使用场景:已经存在的类,它的方法(接口)和需求不匹配时的解决方案.注意适配器模式不是软件设计阶段需要考虑的设计模式,而是随着软件维护,由于不同产品不同厂家造成功能类似而接口不相同情况下的解决方案. 优点: 更好的复用:性如果功能是已经有了的,只是接口不兼容,那么通过适配器模式就可以让这些功能…
定义 将类的接口转化为客户端希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的类可以一起工作,别名Wrapper(包装器). 适配器模式,最终改变一个已有对象的接口. 使用场景 当有那么个类,那么个对象,却不是我想要的接口类型,肿么办?不要方,用适配器模式. java三要素:Target(目标)+Adaptee(待适配者)+Adapter(适配器) 类的适配器,实现Target接口,继承Adaptee类,把待适配类的API转化为目标接口的API. 对象适配器,实现Target接口,持有A…
对象适配器模式的缺点是:与类适配器模式相比,要在适配器中置换适配着类的某些方法比较麻烦.如果一定要置换掉适配者类的一个或多个方法,可以先做一个适配者类的子类,在子类中将适配者类的方法置换掉,然后再把适配者类的子类当做真正的适配着进行适配,实现过程较为复杂. 优点: 1.将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,无须修改原有的结构. 2.增加了类的透明性和复用性,将具体的业务实现过程封装在适配者类中,对于客户端类而言是透明的,而且提高了适配者类的复用性,同一个适配者类可以在…
以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //****************************类模式的Adaptr******************************** //Adapter.h #pragma once class Target { public: Target(); virtual ~Target(); virtual void Request(); protected: private: }; class Adaptee {…
1.概要 适配:即在不改变原有实现的基础上,将原先不适合的接口转换成适合的接口. what is Apater?适配,这个概念在生活中无处不在,比如你的iphone 4手机充电器坏了,这是时候只有一个iphone 8的充电器,两个充电器的头并不匹配,这个时候,你就需要一个充电器适配器.这个适配器将8的充电器转换成能支持4充电的充电器接口.这个例子在不改变8的充电器原有功能的情况下,将8不适合4的接口通过适配器转变成合适的接口.等等例子还有很多. 2.动机 在软件开发的过程中,常常需要将一些"现存…
一.装饰模式 动态地给一个对象添加额外的职责.就增加功能来说,装饰模式相比生成子类更为灵活.有时我们希望给某个对象而不是整个类添加一些功能. 二.UML图 1.Component(概念中提到的对象接口),也就是"被装饰者".2.ConcreateComponent(未添加任何职责的,对象接口的子类).3.Decorator(装饰者抽象类),扩张了对象接口的功能.4.ConcreteDrcorator(具体装饰类),具体怎么装饰对象接口的在这些类里面反映. 三.例子 比如有一个手机,允许…
一.概述 概念 将抽象与实现脱耦,使得抽象和实现可以独立运行 UML图 角色: 角色关系 二.实践 按照上面的角色建立相应的类 抽象化角色 /** * 抽象化角色 * * @author Administrator **/ public abstract class Abstraction { protected Implenmentor impl; public void operation() { impl.operationImpl(); } } 修正抽象角色 /** * 修正抽象角色 *…
一.概述 概念 简要示意图(没有一个统一的UML图) 角色 门面角色:门面模式核心,它被客户端调用,并且熟悉子系统   子系统角色:子系统,子系统并不知道门面的存在,门面对它来说只不过是另外一个客户端而已. 门面模式就是迪米特法则的一个很好的实践! 二.实践 借鉴网友的电脑启动的例子:电脑中有很多组件(比如内存,CPU等),开机的时候都会启动,用户不必一个个和他们打交道,而只需和“门面”打交道 开启门面即可! 三个CPU,Memory,Disk类 /** * CPU类 * * @author A…
一.概述 概念 避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类). UML简图 单纯享元模式 角色 抽象享元角色(Flyweight):定义享元子类公共接口 具体享元角色(ConcreteFlyweight):具体享元类,实现实例共享 享元工厂(FlyweightFacotry):创建和管理享元角色 客户端:维护一个对所有享元对象的引用,自行存储外部状态. 内部状态是存储在享元对象内部,一般在构造时确定或通过setter设置,并且不会随环境改变而改变的状态,因此内部状态可…
一.概述 概念 UML简图 实际使用的场景示例 如果那个对象是一个是很大的图片,需要花费很长时间才能显示出来,那么当这个图片包含在文档中时,使用编辑器或浏览器打开这个文档,打开文档必须很迅速,不能等待大图片处理完成,这时需要做个图片Proxy来代替真正的图片. 如果那个对象在Internet的某个远端服务器上,直接操作这个对象因为网络速度原因可能比较慢,那我们可以先用Proxy来代替那个对象. 现实中的例子比如桌面上的快捷方式,我们点击它,它帮我们找到实际应用程序,它就是一个代理了! 主要角色…
一.概述 动态地给一个对象添加一些额外的职责.就增加功能来说, Decorator模式相比生成子类更为灵活.该模式以对客 户端透明的方式扩展对象的功能. UML简图 角色 在持有Component的引用后,由于其自身也是Component的子类,那么,相当于ConcreteDecorator包裹了Component,不但有Component的特性,同时自身也可以有别的特性,也就是所谓的装饰. 二.实践 根据上面的角色,创建相应的角色 抽象构件 /** * 抽象组件 * * @author Adm…
一.概述 定义 将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. 简图 角色——对应上图中顶点为Component,左边为Leaf,右边为Composite 1.Component 是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为.声明一个接口用于访问和管理Component子部件. 2.Leaf 在组合中表示叶子结点对象,叶子结点没有子结点. 3.Composite 定义有枝节点行为,用来存储子部件,在Compon…
今天要开始我们结构型 设计模式的学习,设计模式源于生活,还是希望能通过生活中的一些小栗子去理解学习它,而不是为了学习而学习这些东西. 结构型设计模式 结构型设计模式又分为 类 结构型 对象 结构型 前者使用对象的继承机制来组织对象和类 后者采用组合聚合 的方式来组合对象. 代理模式 Proxy 理解代理一词 代理表达的是:为某个对象提供一种代理,用于控制该对象的访问,让客户端间接的访问该对象,从而限制.或者增强源对象的一些特性. 举个栗子 从国内科学SW,访问谷歌查阅一些资料的时候,我们肯定务必…
一.引言   从今天开始我们开始讲[结构型]设计模式,[结构型]设计模式有如下几种:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式.[创建型]的设计模式解决的是对象创建的问题,那[结构型]设计模式解决的是类和对象的组合关系的问题.今天我们就开始讲[结构型]设计模式里面的第一个设计模式,适配器模式.说起这个模式其实很简单,在现实生活中也有很多实例,比如:我们手机的充电器,充电器的接头,有的是把两相电转换为三相电的,当然也有把三相电转换成两相电的.我们经常使用笔记本电脑,笔记…
一.引言 从今天开始我们开始讲[结构型]设计模式,[结构型]设计模式有如下几种:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式.[创建型]的设计模式解决的是对象创建的问题,那[结构型]设计模式解决的是类和对象的组合关系的问题.今天我们就开始讲[结构型]设计模式里面的第一个设计模式,中文名称:适配器模式,英文名称:Adapter Pattern.说起这个模式其实很简单,在现实生活中也有很多实例,比如:我们手机的充电器,充电器的接头,有的是把两相电转换为三相电的,当然也有把三…
Adapter 适配器模式(结构型模式) 适配(转换)的概念无处不在:电源转接头.电源适配器.水管转接头... 动机(Motivation)在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象不能满足的.如何应对这种“迁移的变化”?如何既能够利用现有对象的良好表现,同时又能满足新的应用环境所要求的接口? 意图(Intent)将一个类的接口转换成客户希望的另一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一…
Adapter(适配器模式) ---- 加个“适配器”以便于复用 将一个类的接口转换成客户希望的另一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 应用场景 如果我们的代码依赖一些外部的API,或者依赖一些可能会经常更改的类,那么应该考虑用适配器模式. 你想使用一个已经存在的类,而它的接口不符合你的需求 你想创建一个可以复用的类,该类可以与其他不相关的类或者不可预见的类(即那些接口可能不一定兼容的类)协同工作. (仅适用于对象Adapter)你想使用一些已经…
行为型模式 行为型模式关注的是各个类之间的相互作用,将职责划分清楚,使得我们的代码更加地清晰. 策略模式 策略模式太常用了,所以把它放到最前面进行介绍.它比较简单,我就不废话,直接用代码说事吧. 下面设计的场景是,我们需要画一个图形,可选的策略就是用红色笔来画,还是绿色笔来画,或者蓝色笔来画. 首先,先定义一个策略接口: public interface Strategy { public void draw(int radius, int x, int y); } 然后我们定义具体的几个策略:…
1.什么是适配器模式? 适配器如同一个常见的变压器,也如同电脑的变压器和插线板之间的电源连接线,他们虽然都是3相的,但是电脑后面的插孔却不能直接插到插线板上. 如果想让额定工作电压是直流12伏特的笔记本电脑在交流100伏特”的AC电源下工作,应该怎么做呢?通常,我们会使用AC适配器,将家庭用的交流100伏特电压转换成我们所需要的直流12伏特电压.这就是适配器的工作,它位于实际情况与需求之间,填补两者之间的差异.适配器的英文是Adapter,意思是.....相互适合的东西”.前面说的AC适配器的作…
设计模式(十一)代理模式Proxy(结构型) 1.概述 因为某个对象消耗太多资源,而且你的代码并不是每个逻辑路径都需要此对象, 你曾有过延迟创建对象的想法吗 ( if和else就是不同的两条逻辑路径) ? 你有想过限制访问某个对象,也就是说,提供一组方法给普通用户,特别方法给管理员用户?以上两种需求都非常类似,并且都需要解决一个更大的问题:你如何提供一致的接口给某个对象让它可以改变其内部功能,或者是从来不存在的功能? 可以通过引入一个新的对象,来实现对真实对象的操作或者将新的对象作为真实对象的一…
设计模式--外观模式Facade(结构型): 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性.例子1:一个电源总开关可以控制四盏灯.一个风扇.一台空调和一台电视机的启动和关闭.该电源总开关可以同时控制上述所有电器设备,电源总开关即为该系统的外观模式设计. 2. 问题 为了降低复杂性,常常将系统划分为若干个子系统.但是如何做到各个系统之间的通信和相互依赖关系达到最小呢? 3. 解决方案 外观模…
摘要:结构型模式,顾名思义讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功能(对象结构型模式).这些结构型模式,它们在某些方面具有很大的相似性,仔细推敲,侧重点却各有不同.本文试图对这几种结构型模式做一个简单的小结. 主要内容 1.结构型模式概述 2.结构型模式区别与比较 3.对变化的封装 结构型模式概述 结构型模式,顾名思义讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象,从而实现新的功能(…
Java设计模式 结构型模式 适配器模式 模式动机:在软件开发中采用类似于电源适配器的设计和编码技巧被称为适配器模式.通常情况下,客户端可以通过目标类的接口访问它所提供的服务.又是,现有的类可以满足客户的功能需要,但是它所提供的接口不一定是客户类所期望的,这可能是现有类中方法名与目标类中定义的方法不一致等原因所导致的.在这种情况下,现有的接口需要转化为客户类所期望的接口,这样保证了对现有的重用.如不这样的转化,客户类就不能现有类所提供的功能,适配器模式可以完成这样的转化.在适配器模式中可以定义一…