适配器模式的运用

--如果朋友您想转载本文章请注明转载地址"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. 总结一下工作中遇到的NPOI以及在ASP.NET MVC中的使用

    1.前言 相信大家在工作中经常要遇到一些导入导出Execl操作.学习贵在分享,分享使人快乐,园子里的前辈已经有很多好的文章,鄙人也是能力有限,在这里把这些好的文章总结,方便以后再工作中使用. NPOI ...

  2. 深入学习JavaScript(一)

    1.全局变量与局部变量 全局变量:全局变量就是在函数的外部定义的一个在其他地方都可以调用的变量 局部变量:局部变量是相对于全局变量而言的,局部变量指的是在一个区域内存在这个变量 全局变量的创建原理是在 ...

  3. 4、面向对象以及winform的简单运用(继承与多态、命名空间与类库)

    继承 继承既子类与父类之间的关系.子类是父类的一种特例,子类拥有父类所没有的功能. 子类与父类之间的相互赋值——例: Parent p; Son c = new Son(); p = c; //正确, ...

  4. 阿里百川IMSDK--自定义群聊界面

    // 获取群对象 YWTribe *tribe = [self.tribesArray objectAtIndex:indexPath.row]; // 发起群聊 UIViewController * ...

  5. __HTML_5读取文件API

    //HTML5 __FileSystemApi <!doctype html> <html> <head> <meta charset="utf-8 ...

  6. SP*

    1.PS1——默认提示符 root@tcx2250-14:/etc# echo $PS1\u@\h:\w\$ \u是用户名 \h是主机名 \w是当前目录的完整路径.请注意当你在主目录下的时候,如上面所 ...

  7. 用php生成数据字典

    <?php header("Content-type: text/html; charset=utf-8"); $dbserver = "localhost&quo ...

  8. jeecms内容显示条数

    1.按照1.2.3.4.5顺序显示 <div class="index-news"> [@cms_channel id='1'] <h2><span& ...

  9. POJ1088 滑雪

    Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

  10. [NOIP2011] 普及组

    数字反转 小模拟 #include<cstdio> #include<iostream> #include<cstring> using namespace std ...