您的位置:首页 > 其它

设计模式之适配器模式

2016-07-28 18:45 239 查看


如有转载,请申明:

转载至 http://blog.csdn.net/qq_35064774/article/details/52057962

1 什么是适配器模式

 

适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

 

这很好理解。

假如你在美国买了一款电器回中国,这时候是不能直接插上插座就用的,因为美国的生活电压是110V,而中国的是220V,这时候需要一个220V转110V的适配器来转换电压。

 

同样的,在代码中,如果一个接口和目标接口不一致,但只能用目标接口时,就需要用到适配器。

 

 

2 怎么实现适配器模式

为了便于理解,还是以一个简单的问题为入口。

 

 * 现有一个正方形Square类,有方法getSideLengthen

 * 还有一个圆Round接口,有方法getRadius

 * 要求取得正方形的半径

 

题意大概是有一个正方形的类,也就是现有接口getSideLengthen,但只能使用目标接口getRadius。这时候需要一个类来转换接口。

 

首先按要求写出正方形类

 

package com.ittianyu.adapter;

public class Square {
private float sideLengthen;

public Square(float sideLengthen) {
super();
this.sideLengthen = sideLengthen;
}

public float getSideLengthen() {
return sideLengthen;
}
}


然后是圆的接口

package com.ittianyu.adapter;

public interface Round {
float getRadius();
}


接下来是适配器类

 

package com.ittianyu.adapter;

public class SquareRoundAdapter implements Round{
private Square square;

public SquareRoundAdapter(Square square) {
super();
this.square = square;
}

@Override
public float getRadius() {
return square.getSideLengthen() / 2;
}
}


 

简单分析一下这个类,它实现了圆的接口,也就是有了我们的目标方法。

然后再构造方法中,接收了一个正方形类。

在目标方法getRadius中,调用了正方形类的getSideLengthen方法完成适配。

 

还差最后一步,测试

package com.ittianyu.adapter;

public class Test {

public static void main(String[] args) {
SquareRoundAdapter adapter = new SquareRoundAdapter(new Square(2.0f));

System.out.println("半径为" + adapter.getRadius());
}
}


3 在什么情况下使用适配器模式

 

 * 系统需要使用现有的类,而此类的接口不符合系统的需求。

 * 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。

 

4 适配器模式的优点和缺点

 

优点:

 * 将目标类与适配者类解耦。

 * 增加了类的透明性和复用性。

 * 很强的灵活性和扩展性。

 

 

缺点:

 * 在设计里,需要改变多个已有的子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器,而这不太实际。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息