设计模式之适配器模式
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 适配器模式的优点和缺点
优点:
* 将目标类与适配者类解耦。
* 增加了类的透明性和复用性。
* 很强的灵活性和扩展性。
缺点:
* 在设计里,需要改变多个已有的子类的接口,如果使用类的适配器模式,就要针对每一个子类做一个适配器,而这不太实际。
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- 设计模式---状态模式在web前端中的应用
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 解析C#设计模式编程中适配器模式的实现
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- C# 设计模式系列教程-建造者模式
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解