您的位置:首页 > 其它

设计模式之接口型适配器模式

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

总结

分析以上的结果就可以看出,已经利用存在的小汽车满足公路的规章制度的条件下正常行驶了。模拟的比较粗糙简单,只是为了说明具体适配器模式是什么意思。本文并没有介绍过多的理论知识,具体的理论可以查看相关文献,我只是通熟易懂的方式帮助一些朋友更好的理解一些设计模式。如有不足之处,敬请见谅!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: