设计模式之接口型适配器模式
2017-10-06 00:00
225 查看
前言
作为一个java程序员,了解一些常见的设计模式还是很有必要的。下面我将以通俗易懂的示例分别演示各种设计模式。由于本人能力有限,可能有些比喻不是很恰当,还望多多包容。接口型模式之适配器模式
所谓的适配器模式简而言之就是将一个已存在的工具如何更好的满足用户的需求。为了弥补用户需求与工具已有方法之间的差距,就需要采用适配器模式来利用已有的工具去实现用户的需求。这样说的有些抽象,下面以具体的事物为例演示什么是适配器模式。
比如说:已存在的工具就是各个汽车厂家生产的小汽车,每个汽车都有一些固有的属性。但是公路上有一些行驶要求,比如红灯停,绿灯行,黄灯注意等,假设这些就是用户的一些需求。
具体实现如下:
1)用户的需求。创建接口RoadRequiredInterface.java。用此类来定义公路行驶的一些要求。定义如下所示:
package david.interf.adapterpattern; //模拟公路上对汽车的要求 public interface RoadRequiredInterface { //红灯 public abstract void redLight(); //黄灯 public abstract void yellowLight(); //绿灯 public abstract void greenLight(); }
2)小汽车。定义一个小汽车类Car.java,模拟为具体的工具。具体代码如下所示:
package david.interf.adapterpattern; //模拟刚生产出厂的车 public class Car { private String name; //汽车品牌 private Integer acc; //加速度 private Integer maxSpeed; //最高速度 private Integer currentSpeed; //当前速度 public Car(String name, Integer acc, Integer maxSpeed) { this.name = name; this.acc = acc; this.maxSpeed = maxSpeed; this.currentSpeed = 0; } public void speed() { currentSpeed += acc; if(currentSpeed > maxSpeed) currentSpeed -= acc; System.out.println(this.name+"当前行驶速度是"+currentSpeed+"km/h"); } public void slow() { currentSpeed -= acc; if(currentSpeed < 0) currentSpeed = 0; System.out.println(this.name+"当前行驶速度是"+currentSpeed+"km/h"); } public void currentSpeed() { System.out.println(this.name+"当前行驶速度是"+currentSpeed+"km/h"); } public void stop() { this.currentSpeed = 0; System.out.println(this.name+" 停止行驶!"); } }
3)为了让汽车能够行驶在马路上就需要满足一些公路上的规章制度,即利用已有工具满足用户需求。定义类OnRoadCar.java,此类需要继承工具Car并实现需求接口RoadRequiredInterface。具体代码如下:
package david.interf.adapterpattern; public class OnRoadCar extends Car implements RoadRequiredInterface { public OnRoadCar(String name, Integer acc, Integer maxSpeed) { super(name, acc, maxSpeed); } @Override public void redLight() { System.out.println("当前路况是:红灯"); super.stop(); super.currentSpeed(); } @Override public void yellowLight() { System.out.println("当前路况是:黄灯"); super.slow(); } @Override public void greenLight() { System.out.println("当前路况是:绿灯"); super.speed(); } }
4)以上即是最简单地实现了适配器模式。为了观察效果,定义了一个测试类AdapterPatternTest.java。具体代码如下所示:
package david.interf.adapterpattern; import java.util.Random; public class AdapterPatternTest { public static void main(String[] args) { final OnRoadCar roadCar = new OnRoadCar("BMW", 30, 250); Thread thread = new Thread(new Runnable() { public void run() { Random random = new Random(); while(true) { int r = random.nextInt(6); if(r > 4) roadCar.redLight(); else if(r > 3) roadCar.yellowLight(); else roadCar.greenLight(); try { Thread.sleep(4000); } catch (InterruptedException e) { e.printStackTrace(); } } } }); thread.start(); } }
5)运行结果如下所示:
当前路况是:绿灯 BMW当前行驶速度是30km/h 当前路况是:绿灯 BMW当前行驶速度是60km/h 当前路况是:绿灯 BMW当前行驶速度是90km/h 当前路况是:黄灯 BMW当前行驶速度是60km/h 当前路况是:绿灯 BMW当前行驶速度是90km/h 当前路况是:黄灯 BMW当前行驶速度是60km/h 当前路况是:红灯 BMW 停止行驶! BMW当前行驶速度是0km/h 当前路况是:绿灯 BMW当前行驶速度是30km/h 当前路况是:绿灯 BMW当前行驶速度是60km/h 当前路况是:黄灯 BMW当前行驶速度是30km/h 当前路况是:绿灯 BMW当前行驶速度是60km/h 当前路况是:绿灯 BMW当前行驶速度是90km/h 当前路况是:绿灯 BMW当前行驶速度是120km/h 当前路况是:绿灯 BMW当前行驶速度是150km/h 当前路况是:绿灯 BMW当前行驶速度是180km/h 当前路况是:红灯 BMW 停止行驶! BMW当前行驶速度是0km/h
总结
分析以上的结果就可以看出,已经利用存在的小汽车满足公路的规章制度的条件下正常行驶了。模拟的比较粗糙简单,只是为了说明具体适配器模式是什么意思。本文并没有介绍过多的理论知识,具体的理论可以查看相关文献,我只是通熟易懂的方式帮助一些朋友更好的理解一些设计模式。如有不足之处,敬请见谅!!!
相关文章推荐
- 设计模式之接口型模式(一)----适配器模式
- 【笔记】Java设计模式——接口型模式、适配器模式
- 设计模式之接口型适配器模式
- Java设计模式——接口型模式:适配器模式
- 软件设计师之路-----设计模式之接口型设计模式1-------适配器模式
- 设计模式---接口型模式
- java设计模式学习笔记5 适配器模式几种实现方式
- Php设计模式之【适配器模式 Adapter Pattern】
- JAVA设计模式-适配器模式
- 设计模式之---适配器模式
- 设计模式-适配器模式
- 深入浅出设计模式之适配器模式
- 您的设计模式——适配器模式【Adapter Pattern】
- java设计模式-适配器模式
- Java设计模式(9)适配器模式(Adapter模式)
- 设计模式--1、适配器模式
- 跟着实例学习设计模式(8)-适配器模式adapter(结构型)
- 深入浅出Java设计模式之适配器模式
- Java常用的设计模式:适配器模式
- java设计模式-适配器模式