适配器模式的运用

--如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3884785.html "谢谢--

主要应用:
可以在符合OCP原则(开笔原则)的基础上,为类增加新的功能。
在现有功能上添加新的功能时无须修改原有功能代码。

主要角色:
目标角色:就是期待得到的接口,如给汽车添加GPS的接口;
源角色:需要被增加功能的类或接口,如汽车类
适配器角色:新创建的类,在源角色的基础上实现了目标角色,如已经成功添加了GPS的汽车类

例子:
为汽车添加GPS功能
1.建立目标角色——添加GPS的接口
/**
* 定义GPS接口
*
* @author XIEHEJUN
*
*/
public interface GPS {
  public Point getLocation();
}

2.建立源角色——汽车类

/**
* 汽车实体类
*
* @author XIEHEJUN
*
*/
public class Car {
  private String name;
  private double speed;

  public String getName() {
    return name;
  }

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

  public double getSpeed() {
    return speed;
  }

  public void setSpeed(double speed) {
    this.speed = speed;
  }

  @Override
  public String toString() {
    StringBuilder sbd =new StringBuilder();
    sbd.append("车主名称为:"+name+" ");
    sbd.append("车速为:"+speed+" ");
    return sbd.toString();
  }

}

3.适配器角色——为汽车添加GPS的类

/**
* 为汽车添加GPS
*
* @author XIEHEJUN
*
*/
public class CarAddGPS extends Car implements GPS {

  @Override
  public Point getLocation() {
    Point point = new Point();
    point.setLocation(super.getSpeed(), super.getSpeed());
    return point;
  }

  @Override
  public String toString() {
    StringBuilder sbd = new StringBuilder();
    sbd.append(super.toString());
    sbd.append(",坐标为(" + getLocation().x + "," + getLocation().y + ")");
    return sbd.toString();
  }
}
4.测试适配器类——main函数

public static void main(String[] args) {
  System.out.println("************创建普通汽车类**********");
  Car car = new Car();
  car.setName("李宏");
  car.setSpeed(60);
  System.out.println(car);
  System.out.println("************创建带有GPS的汽车类*******");
  CarAddGPS carGps = new CarAddGPS();
  carGps.setName("李小华");
  carGps.setSpeed(60);
  System.out.println(carGps);
}

java笔记--适配器模式的运用的更多相关文章

  1. 【设计模式】Java设计模式 - 适配器模式

    [设计模式]Java设计模式 - 适配器模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一 ...

  2. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

  3. Java设计模式——适配器模式

    JAVA 设计模式 适配器模式 用途 适配器模式 (Adapter) 将一个类的接口转换成客户希望的另外一个接口. Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 适配器 ...

  4. java笔记00-目录

    --2013年7月26日17:49:59 学习java已久,趁最近有空,写一个总结: java笔记01-反射:

  5. java笔记整理

    Java 笔记整理 包含内容     Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...

  6. 转 Java笔记:Java内存模型

    Java笔记:Java内存模型 2014.04.09 | Comments 1. 基本概念 <深入理解Java内存模型>详细讲解了java的内存模型,这里对其中的一些基本概念做个简单的笔记 ...

  7. servlet(6) - servlet总结 - 小易Java笔记

    垂阅前必看: 这都是我总结的我觉得是学习servlet应该掌握的,我在学习期间也做了一个博客项目来让所学的知识得以巩固.下面就是博客项目链接.前面的servlet相关的笔记总汇,还有就是我把觉得在学习 ...

  8. Java笔记 —— 继承

    Java笔记 -- 继承 h2{ color: #4ABCDE; } a{ text-decoration: none!important; } a:hover{ color: red !import ...

  9. Java笔记 —— 方法重载和方法重写

    Java笔记 -- 方法重载和方法重写 h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: red ...

随机推荐

  1. css兼容性的问题

    https://www.douban.com/note/314793848/ 随意的一个博客ie6的兼容 这个博客比较好 http://blog.csdn.net/chuyuqing/article/ ...

  2. android之文件权限问题

    当我们在手机上安装一个应用的时候,linux会为每个APP创建一个用户名和用户组 xidian.dy.com.chujia是系统为每个应用创建的一个独立的文件夹,我们可以看到这个文件的所有者为app_ ...

  3. 解决 pathForResource 返回 nil的问题

    点击(此处)折叠或打开 NSString* path = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@&quo ...

  4. ie6下使用js替换img标签src属性图片不显示的错误

    首先,我必须再次强调一下,F-U-C-K I-E! 其次,简单阐述一下这个bug的出现的情况.页面中有个<a href=”javascript:void(0)” onclick=”swapImg ...

  5. .net架构设计读书笔记--第三章 第8节 域模型简介(Introducing Domain Model)

    一.数据--行为转变     很长的时间,典型的分析方法或多或少是以下两种,第一,收集需求并做一些分析,找出有关实体 (例如,客户. 订单. 产品) 和进程来实现. 第二,手持这种理解你尝试推断一个物 ...

  6. 安装Eclipse插件

    安装Eclipse插件   从eclipse 3.6开始,eclipse有一个marketplace,这个类似现在手机的app store一样,可以在其中检索相关插件,直接安装,打开help--> ...

  7. bootstrap fileinput添加上传成功回调事件

    国外牛人做的bootstrap fileinput挺酷的,但是可惜没有提供自定义上传成功回调事件的接口,因此感到非常头疼,但是很幸运的是,我在网上搜索到一个提问帖子,它问到使用Jquery的on函数绑 ...

  8. ThinkPHP多表联合查询的常用方法

    1.原生查询示例: $Model = new Model(); $sql = 'select a.id,a.title,b.content from think_test1 as a, think_t ...

  9. 判断一个数据是否存在于一个表中,Oracle中写自定义函数

    create or replace function isExist(data in DataTypes) --DataTypes 为表中该数据的类型return Numberisv_flag num ...

  10. hdu 1576 求逆元

    题意:给出n=A mod 9973和B,求(A/B) mod 9973 昨天用扩展欧几里得做过这题,其实用逆元也可以做. 逆元的定义:例如a*b≡1 (mod m),则b就是a关于m的逆元. 求逆元方 ...