设计模式(17)-----适配器模式

适配器模式(adapter)

定义

  将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

UML类图

例子

  在NBA的赛场上,姚明还不会说英文,教练也不会说中文,所以需要一个翻译,对应的,翻译就起到了适配器的作用。

  篮球运动员类

package com.csdhsm.pattemdesign.adapter;

/**
 * @Title:  Player.java
 * @Description: 球员抽象类
 * @author: Han
 * @date:   2016年6月25日 下午6:56:33
 */
public abstract class Player {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    //进攻
    public abstract void attack();

    //防守
    public abstract void defense();
}

  

package com.csdhsm.pattemdesign.adapter;

/**
 * @Title:  Fowards.java
 * @Description: 后卫类,可以听懂教练的话
 * @author: Han
 * @date:   2016年6月25日 下午6:57:59
 */
public class Fowards extends Player {

    @Override
    public void attack() {

        System.out.println("后卫" + super.getName() + "快去进攻!");
    }

    @Override
    public void defense() {

        System.out.println("后卫" + super.getName() + "快去防守!");
    }
}

  外籍中锋

package com.csdhsm.pattemdesign.adapter;

/**
 * @Title:  ForeignCenter.java
 * @Description: 外籍中锋,听不懂attack和defense,只能听懂jingong和fangshou
 * @author: Han
 * @date:   2016年6月25日 下午7:02:31
 */
public class ForeignCenter {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    //外籍中锋能听懂的进攻
    public void jingong() {

        System.out.println("中锋" + this.getName() + "快去进攻!");
    }

    //外籍中锋能听懂的防守
    public void fangshou() {

        System.out.println("中锋" + this.getName() + "快去防守!");
    }
}

  翻译

package com.csdhsm.pattemdesign.adapter;

/**
 * @Title:  Translator.java
 * @Description: 翻译类,起到适配器作用
 * @author: Han
 * @date:   2016年6月25日 下午7:21:05
 */
public class Translator extends Player {

    private ForeignCenter ymm = new ForeignCenter();

    @Override
    public void setName(String name) {
        super.setName(name);
        ymm.setName(this.getName());
    }

    @Override
    public void attack() {
        ymm.jingong();
    }

    @Override
    public void defense() {
        ymm.fangshou();
    }
}

  客户端

package com.csdhsm.pattemdesign.adapter;

public class Solution {

    public static void main(String[] args) {
        Player m = new Fowards();
        m.setName("麦迪");
        Player y = new Translator();
        y.setName("姚明");

        m.attack();
        m.defense();
        y.attack();
        y.defense();
    }
}

  结果

  OK。成功。

总结

  适配器模式的用意是要改变源的接口,以便于目标接口相容。缺省适配的用意稍有不同,它是为了方便建立一个不平庸的适配器类而提供的一种平庸实现。

  在任何时候,如果不准备实现一个接口的所有方法时,就可以使用“缺省适配模式”制造一个抽象类,给出所有方法的平庸的具体实现。这样,从这个抽象类再继承下去的子类就不必实现所有的方法了。

时间: 2024-11-05 14:58:49

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

笔记-大话设计模式-17 适配器模式

适配器模式(Adapter),将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 适配器模式主要应用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况. 适配器模式有两种类型:类适配器模式和对象适配器模式. DataAdapter用作DataSet和数据源之间的适配器以便检索和保存数据.DataAdapter通过映射Fill(这更改了DataSet中的数据以便与数据源中的数据相匹配)和Update(这更改了数据源中的

大话设计模式_适配器模式(Java代码)

适配器模式:将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 简单描述: 大话设计模式中的截图: 代码例子: AbstractPlayer类: 1 package com.longsheng.adapter; 2 3 public abstract class AbstractPlayer { 4 5 public abstract void attack(); 6 7 public abstract void defenc

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

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

设计模式 8 —— 适配器模式

设计模式目录: 设计模式 1 ——观察者模式 设计模式 2 —— 装饰者模式 设计模式 3 —— 迭代器和组合模式(迭代器) 设计模式 4 —— 迭代器和组合模式(组合) 设计模式 5 —— 工模式 设计模式 6 —— 单件模式 设计模式 7 —— 命令模式 设计模式 8 —— 适配器模式 概述 第1 部分 问题引入 第2 部分 实现 第3 部分 定义 第1 部分 问题引入 OO适配器是什么,现实中到处都是.比方说:如果你需要在欧洲国家使用美国制造的笔记本电脑,你可能需要使用一个交流电的适配器.

C#设计模式之六适配器模式(Adapter Pattern)【结构型】

原文:C#设计模式之六适配器模式(Adapter Pattern)[结构型] 一.引言 从今天开始我们开始讲[结构型]设计模式,[结构型]设计模式有如下几种:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式.[创建型]的设计模式解决的是对象创建的问题,那[结构型]设计模式解决的是类和对象的组合关系的问题.今天我们就开始讲[结构型]设计模式里面的第一个设计模式,中文名称:适配器模式,英文名称:Adapter Pattern.说起这个模式其实很简单,在现实生活中也有很多实例,比

设计模式之适配器模式

适配器模式(Adapter Pattern)有时候也称包装样式或者包装.将一个类的接口转接成用户所期待的.一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类别自己的接口包裹在一个已存在的类中. Adapter Pattern有两种: 类的Adapter Pattern(继承) 对象的Adapter Pattern(委托) 下面我们用第一种来实现适配器模式: 我们首先来看看类图: 具体实现如下: Banner类: public class Banner { private Stri

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

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

螃蟹学PHP设计模式之适配器模式

之前对java的设计模式略有了解,但是螃蟹目前是靠PHP吃饭,所以对于进阶学习php设计模式还是很有必要.螃蟹虽然做开发两年了,但是在老鸟眼中还是菜鸟,为了自己写的代码更容易维护和进行团队协作,所以我要搞定设计模式.希望螃蟹今年能创业成功或找个好工作. 1.适配器模式 螃蟹的理解是你买了港行的iphone手机,发现自家的插座和手机自带的插头不配,怎么办呢,就需要一个转换器(适配器).可能原来系统的类不是你设计的,但是现在你要使用原来的类,发现有问题,但原来的类又不能动,或者不需要动,这样你写一个

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

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