设计模式之--适配器模式(Adapter)

定义:Convert a interface of class into anthoer interface clients expect.
     Adapter let classes work together that could‘t otherwise because of incompatible interfaces
   将实现某种接口的类转换成客户端希望的另一种接口接收方式.适配器让原本由于实现不同接口而无法一起应用的类在一起工作。

其他:适配器分为类适配器 和 对象适配器
     类适配:适配器通过继承第三方类,来整合第三方的资源到客户端需要的类中
     对象适配器:适配器通过聚合第三方的类,来整合地方的资源到客户端需要的类中(常用)

对象适配器类图:

一:接口

package dmode.adapter;

/**
 * 类描述:人类接口
 * @version 1.0  CreateDate: 2015-2-15
 *
 * @updateDate
 * @updatePerson
 * @declare
 */
public interface IPerson {

    /**
     * 方法描述:自我介绍
     */
    public void selfIntrouction();
}

二:客户端实现类

package dmode.adapter;

/**
 * 类描述:  中国人
 * @version 1.0  CreateDate: 2015-2-15
 *
 * @updateDate
 * @updatePerson
 * @declare
 */
public class ChinaPerson implements IPerson{

    public ChinaPerson(){
    }

    public ChinaPerson(String name_x,String name_m){
        this.name_x = name_x;
        this.name_m = name_m;
    }

    /**
     * 中国人的姓
     */
    private String name_x;

    /**
     * 中国人的名
     */
    private String name_m;

    /**
     * @see dmode.adapter.IPerson#selfIntrouction()
     */
    @Override
    public void selfIntrouction() {
        System.out.println("你好,我叫" + name_x + name_m);
    }

    /**
     * @param name_x the name_x to set
     */
    public void setName_x(String name_x) {
        this.name_x = name_x;
    }

    /**
     * @param name_m the name_m to set
     */
    public void setName_m(String name_m) {
        this.name_m = name_m;
    }

}

三 第三方类(需要被适配的对象)

package dmode.adapter;

/**
 * 类描述:  美国人
 * @version 1.0  CreateDate: 2015-2-15
 *
 * @updateDate
 * @updatePerson
 * @declare
 */
public class AmerPerson  {

    public AmerPerson(){

    }

    public AmerPerson(String name_first,String name_last){
        this.name_first = name_first;
        this.name_last = name_last;
    }

    /**
     * 美国人的名字
     */
    private String name_first;

    /**
     * 美国人的姓氏
     */
    private String name_last;

    /**
     * 方法描述:美国人自我介绍
     * @param person
     */
    public void showSelf() {
        System.out.println("hello,I am" + name_first + "." + name_last);
    }

    /**
     * @return the name_first
     */
    public String getName_first() {
        return name_first;
    }

    /**
     * @return the name_last
     */
    public String getName_last() {
        return name_last;
    }
}

四:适配器(此处为对象适配器,通过聚合,类适配器需要继承第三方类)

package dmode.adapter;

/**
 * 类描述:  人员适配器
 * @version 1.0  CreateDate: 2015-2-15
 *
 * @updateDate
 * @updatePerson
 * @declare
 */
public class AdapterPerson implements IPerson{

    private AmerPerson amerPerson;

    public AdapterPerson(AmerPerson _amerPerson){
        this.amerPerson = _amerPerson;
    }

    /**
     * @see dmode.adapter.IPerson#selfIntrouction()
     */
    @Override
    public void selfIntrouction() {
        System.out.println("你好,我叫" + amerPerson.getName_last() + amerPerson.getName_first());
    }

}

五:应用场景

package dmode.adapter;

import java.util.ArrayList;
import java.util.List;

/**
 * 类描述: 场景 ,人员做自我介绍
 * @version 1.0  CreateDate: 2015-2-15
 *
 * @updateDate
 * @updatePerson
 * @declare
 */
public class Client {

    public static void main(String[] args) {

        //美国式的自我介绍
        AmerPerson amerPerson = new AmerPerson("迈克尔","乔丹");
        amerPerson.showSelf();

        //将美国人变成适配器人进行中国式的自我介绍
        List<IPerson> persons = new ArrayList<IPerson>();
        //IPerson chinaPerson = new ChinaPerson("张","三");
        IPerson person = new AdapterPerson(amerPerson);
        persons.add(person);
        for(IPerson per : persons){
            per.selfIntrouction();
        }
    }
}

结果:

hello,I am迈克尔.乔丹
你好,我叫乔丹迈克尔

时间: 2024-12-31 03:59:37

设计模式之--适配器模式(Adapter)的相关文章

设计模式之适配器模式(Adapter Pattern)

适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 1. 解决的问题 即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 2. 模式中的角色 2.1 目标接口(Target):客户所期待的接口.目标可以是具体的或抽象的类,也可以是接口. 2.2 需要适配的类(Adaptee):需要适配的类或适配者类. 2.3 适配器(Adapter):通过包装一个需要适配的对象,把

Java设计模式之适配器模式(Adapter Pattern)

Adapter Pattern的作用是在不改变功能的前提下转换接口.Adapter分为两类,一类是Object Adapter, 另一类是Class Adapter.由于Class Adapter的实现需要用到多继承,而Java不支持多继承,所以这里只关注Object Adapter. 在JDK1.5之前是没有 java.util.Iterator 接口的,java.util.Enumeration 接口起着 Iterator 的作用.那么如果我们需要维护一些年代比较久远的代码,可能就会面临着没

如何让孩子爱上设计模式 —— 7.适配器模式(Adapter Pattern)

如何让孩子爱上设计模式 -- 7.适配器模式(Adapter Pattern) 概念相关 定义: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而 使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 简单点说: 两个彼此间没有太大关联的类,想进行交互完成某些事情,如果 直接去修改各自的接口,就显得有些繁琐了,可以加个中间类, 用它来协调两类之间的关系,完成相关业务.这种玩法就叫适配器模式! 两种适配器模式: 根据适配器类与适配者类的关系不同,适配器模式可分为 类适配器 和 对

设计模式之适配器模式(Adapter)摘录

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

二十四种设计模式:适配器模式(Adapter Pattern)

适配器模式(Adapter Pattern) 介绍将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 示例有一个Message实体类,某个类对它的操作有Insert()和Get()方法.现在需要把这个类转到另一个接口,分别对应Add()和Select()方法. MessageModel using System; using System.Collections.Generic; using System.Text; name

JavaScript设计模式 Item9 --适配器模式Adapter

适配器模式(转换器面模式),一般是为要使用的接口,不符本应用或本系统使用,而需引入的中间适配层类或对象的情况.适配器模式的作用是解决两个软件实体间的接口不兼容的问题. 一.定义 适配器模式(Adapter)是将一个类(对象)的接口(方法或属性)转化成客户希望的另外一个接口(方法或属性),适配器模式使得原本由于接口不兼容而不能一起工作的那些类(对象)可以一些工作.速成包装器(wrapper). 适配器的别名是包装器(wrapper),这是一个相对简单的模式.在程序开发中有许多这样的场景:当我们试图

Java设计模式之适配器模式(Adapter)

转载:<JAVA与模式>之适配器模式 这个总结的挺好的,为了加深印象,我自己再尝试总结一下 1.定义: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作.      (太官方了,不太好理解, 其实就是要用到两个不相关的类/接口,但是又没有源代码,或者不想修改源代码,而增加一个类来完成合并使用的目的) 2.实现这个目的有两个方法,继承或者组合 2.1.使用继承(就是所谓的类适配器模式) 2.2.使用组合(所谓的对象适配器模式)

设计模式之适配器模式 adapter 适配器模式分类概念角色详解 类适配器 对象适配器 接口适配器 双向适配器

现实世界中的适配器模型 先来看下来几个图片,截图自淘宝 上图为港版的插头与港版的插座 上图为插座适配器卖家的描述图 上图为适配后的结果 现实世界中适配器模式 角色分类 这就是适配器模式在电源插座上的应用 我们看下在插座适配器中的几个重要角色 可以看得出来,大陆和港版插座面板,都是作为电源的角色,他们的功能是相似的或者说相近的 插头要使用插座,进而接通电流 现实世界到代码的转换 电源插座代码示例 港版插座面板 package adapter; /**目标角色 Target 接口 * 香港地区使用的

【设计模式】—— 适配器模式Adapter

前言:[模式总览]——————————by xingoo 模式意图 如果已经有了一种类,而需要调用的接口却并不能通过这个类实现.因此,把这个现有的类,经过适配,转换成支持接口的类. 换句话说,就是把一种现有的接口编程另一种可用的接口. 模式结构 [类的适配器] Target 目标接口 Adaptee 现有的类 Adapter 中间转换的类,即实现了目标接口,又继承了现有的类. 1 package com.xingoo.test1; 2 interface Target{ 3 public voi

设计模式之适配器模式 Adapter

从现在开始,将转入设计模式中的结构型模式 定义与角色 工作场景 代码实现 /** * 被适配的类--相当于键盘 * @author bzhx * 2017年3月10日 */ public class Adaptee { public void request(){ System.out.println("可以完成客户请求的需要的功能"); } } Adaptee类 public interface Target { void handleReq(); } Target 接口 /** *