设计模式——适配器模式(adpter模式)

适配器模式:按照字面理解可以理解为要适应要配合才能一起很好的工作。

专业定义:把一个类的API转换成用户期望的另一种API,让原本不能在一起工作的类能够在一起工作。如果理解起来不是很明了,我们举个简单的例子,如下:电脑是一个类,电源插座是一个类,有时候电脑的电源插头是3孔的,而恰好现在我们可用的电源插座是两孔的,现在插不进去,无法正常使用电脑,该怎么办?那么此时,我们就想到了本节所提到的适配器模式。如果我们有一个电源适配器,其作用就是将电脑的3孔电源转换成2孔的电源,那么电脑不就可以正常的工作了吗?

适配器模式有类适配器模式和对象适配器模式

一 类适配器模式代码示例(核心思想:通过继承被适配者来建立适配器)

//用户期望能够使电脑插2孔的方法,我们用一个接口来定义

public interface Mhope

{

public void method2(){};

}

//电脑类

public  class   Computer

{

//插3孔电源的方法

public void  method3(){};

}

//适配器,通过继承来建立适配器这样就保留了电脑插3孔电源的方法,通过实现接口来满足用户期望的方法

public class Adapter extends Computer implements Mhope

{

//public void  method3(){}; 原来有的插3孔的方法

public void method2(){}; //实现了用户期望的插2孔的方法

}

有了适配器以后,那你想想看,我们把电脑插在适配器上,再将适配器插在我们的两孔电源插座上,这样就将电脑的插3孔电源的方法转换用户期望的插2孔电源的方法,这就是适配器的类适配器模式,既然是通过继承构建适配器的,那么优点就是可以在适配器中对父类插3孔的方法进行修改;

二对象适配器模式代码示例(核心思想:通过构建被适配者的对象来使用被适配者的方法,在适配器中定义用户期望的方法)

//电脑类

public  class   Computer

{

//插3孔电源的方法

public void  method3(){};

}

//适配器,

public class Adapter

{

private  Computer computer;

//通过构造方法,可以使用插3孔的方法

public Adapter(Computer computer)

{

this.computer=computer;

}

//使用插3孔的方法

public  void  usemethod3()

{

computer.method3();

}

//用户期望用到的插2孔的方法

public void hopemethod2(){

//详细代码

......................

}; }

}

不同于类的适配器模式,对象适配器模式是通过构建被适配者的对象来实现适应工作的,那么它的优点就可以是将不同的被适配者适配到同一个目标上。3,4,5,6孔的电器插头插到我们的具有3,4,5,6孔的电源适配器上,然后将适配器插到2孔电源上,不就都可以正常工作了吗????  (此处举例,话说有4,5,6孔的插座吗?O(∩_∩)O哈哈~)

时间: 2024-08-07 08:38:00

设计模式——适配器模式(adpter模式)的相关文章

一起学java设计模式--适配器模式(结构型模式)

适配器模式 现有一个接口DataOperation定义了排序方法sort(int[]) 和查找方法search(int[], int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch 的binarySearch(int[], int)方法实现了二分查找算法.现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中.绘制类图并编程实现. (要求实现

《Head First 设计模式》学习笔记——适配器模式 + 外观模式

在ADO.NET中,对于我们从数据库中取出的数据都要放到一个DataSet中,不管你是Access的数据库,还是SQL的数据库,或者是Oracle的数据库都要放到DataSet中..NET中并没有提供如:SqlDataSet.OleDbDataSet.OracleDataSet等,它只提供了一种DataSet就是用SqlDataAdapte等去填充数据:为什么这一个DataSet能存放不同的数据呢?就是有这些适配器来适配.----题记 设计模式 适配器模式:将一个类的接口,转换成客户期待的另一个

设计模式之备忘录模式(Memento)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

设计模式08-桥接模式

1. 概念 将抽象部分和它的实现分离,使他们都可以独立变化 个人理解:将接口(或者抽象类)对象作为业务对象中的成员变量达到“多维度的变化”  ,这里说的多维度变化指的就是一个接口或者抽象类的具体实现是有多个 例如: interface A{ //method } class Business{ private A a ; //将接口作为成员变量 public Business(A a){ this.a = a ; } } class A1 implements A{} class A2 impl

设计模式之策略模式(Strategy)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

设计模式之代理模式(Proxy)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

设计模式-行为型模式-策略模式

策略模式 在实际工作中我用到了策略模式,但为什么要有环境角色呢? 这里我贴上英文对含义的介绍, The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it. 然后看看这种设计模式的组成, 一般的,策略模式

设计模式之组合模式(Composite)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化委托给另一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些具体的类的信息封装起来.第二,它们隐藏了这些类的实例是如何被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以

螃蟹学PHP设计模式之建造者模式

2.建造者模式 螃蟹今天要学习建造者模式了,昨天的适配器记得还是很清楚的.对于建造者模式,螃蟹的理解是你有10部iphone手机要充电,假设充电器额定电压都是220v,但是外电压不稳定,可能是220v,也可能是240v,或是300v,这个时候怎么办,可行的方法是购置一个家用变压器,把充电器都连在变压器上,不需要直接连在外电网上,无论外电压如何变化,只需要操作变压器即可.这个比喻可能有些牵强,不过还是能够说明建造者模式的用途,就是原对象可能是可变的,包括接收的参数或是方法等,但是如果我们已经在程序

设计模式——结构型模式

设计模式的另一大类型为结构型.共收录了7个模式,分别为适配器模式.桥接模式.组合模式.装饰模式.外观模式.享元模式.代理模式.下面从特点和使用两方面小探,欢迎交流!      适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作.[大话设计模式]        特点:需要交流的两方,在数据和行为都匹配,但接口不符时,我们应该考虑用适配器,目的是促使交流和复用.可以理解为入乡随俗,相同的意思,不同的表达