【编程基础】Adapter设计模式
2015-03-29 09:51
274 查看
Adapter适配器模式是将两个不兼容的类组合在一起使用。生活中笔记本电脑和手机等数码产品的充电器就是一个适配器,将家用220V的交流电转换为笔记本或手机正常工作所需的目标电压和电流。适配器起到一种转换和包装的作用。
Adapter设计模式主要目的组合两个不相干类,常用有两种方法:第一种解决方案是修改各自类的接口。但是如果没有源码,或者不愿意为了一个应用而修改各自的接口,则需要使用Adapter适配器,在两种接口之间创建一个混合接口。
Adapter适配器设计模式中有3个重要角色:被适配者Adaptee,适配器Adapter和目标对象Target。其中两个现存的想要组合到一起的类分别是被适配者Adaptee和目标对象Target角色,我们需要创建一个适配器Adapter将其组合在一起。
实现Adapter适配器设计模式有两种方式:组合(compositon, has-a关系)和继承(inheritance,is-a关系)。
对象适配器模式使用组合,UML图如下:
类适配器模式使用继承,UML图如下:
假设要画图形,有圆形和方形两个类,现在需要一个既可以画圆形又可以画方形的类。
组合关系的Adapter适配器模式如下:
[java] view
plaincopy
//圆形,目标对象
class Cirecle{
public void drawCircle(){
System.out.println(“Draw circle”);
}
}
//方形,被适配对象
class Square{
public void drawSquare(){
System.out.println(“Draw square”);
}
}
//既可以画圆形,又可以画方形,适配器
public class HybridShape extends Circle{
private Square square;
public HybridShape(Square square){
this.square = square;
}
public void drawSquare(){
square.drawSquare();
}
}
适配器继承目标对象,同时组合被适配对象,如果需要画圆时,直接调用父类的画圆方法即可,如果需要画方,则调用被适配对象的画方形方法。
继承关系的Adapter适配器模式如下:
[java] view
plaincopy
interface ICircle{
public void drawCircle();
}
interface ISquare{
public void drawSquare();
}
//圆形
class Cirecle implements ICircle{
public void drawCircle(){
System.out.println(“Draw circle”);
}
}
//方形
class Square implements ISquare{
public void drawSquare(){
System.out.println(“Draw square”);
}
}
//既可以画圆形,又可以画方形,适配器
public class HybridShape implements ICircle, ISquare{
private ISquare square;
private ICircle circle;
public HybridShape(Square square){
this.square = square;
}
public HybridShape(Circle circle){
this.circle = circle;
}
public void drawSquare(){
square.drawSquare();
}
public void drawCircle(){
circle.drawCircle();
}
}
Java中类不允许多继承,但是可以实现多个接口,继承关系的Adapter适配器设计模式就是利用java可以实现多个接口的特性。
JDK里面的适配器模式应用:
•java.util.Arrays#asList()
•java.io.InputStreamReader(InputStream)
•java.io.OutputStreamWriter(OutputStream)
•javax.xml.bind.annotation.adapters.XmlAdapter#marshal()
•javax.xml.bind.annotation.adapters.XmlAdapter#unmarshal()
Adapter设计模式主要目的组合两个不相干类,常用有两种方法:第一种解决方案是修改各自类的接口。但是如果没有源码,或者不愿意为了一个应用而修改各自的接口,则需要使用Adapter适配器,在两种接口之间创建一个混合接口。
Adapter适配器设计模式中有3个重要角色:被适配者Adaptee,适配器Adapter和目标对象Target。其中两个现存的想要组合到一起的类分别是被适配者Adaptee和目标对象Target角色,我们需要创建一个适配器Adapter将其组合在一起。
实现Adapter适配器设计模式有两种方式:组合(compositon, has-a关系)和继承(inheritance,is-a关系)。
对象适配器模式使用组合,UML图如下:
类适配器模式使用继承,UML图如下:
假设要画图形,有圆形和方形两个类,现在需要一个既可以画圆形又可以画方形的类。
组合关系的Adapter适配器模式如下:
[java] view
plaincopy
//圆形,目标对象
class Cirecle{
public void drawCircle(){
System.out.println(“Draw circle”);
}
}
//方形,被适配对象
class Square{
public void drawSquare(){
System.out.println(“Draw square”);
}
}
//既可以画圆形,又可以画方形,适配器
public class HybridShape extends Circle{
private Square square;
public HybridShape(Square square){
this.square = square;
}
public void drawSquare(){
square.drawSquare();
}
}
适配器继承目标对象,同时组合被适配对象,如果需要画圆时,直接调用父类的画圆方法即可,如果需要画方,则调用被适配对象的画方形方法。
继承关系的Adapter适配器模式如下:
[java] view
plaincopy
interface ICircle{
public void drawCircle();
}
interface ISquare{
public void drawSquare();
}
//圆形
class Cirecle implements ICircle{
public void drawCircle(){
System.out.println(“Draw circle”);
}
}
//方形
class Square implements ISquare{
public void drawSquare(){
System.out.println(“Draw square”);
}
}
//既可以画圆形,又可以画方形,适配器
public class HybridShape implements ICircle, ISquare{
private ISquare square;
private ICircle circle;
public HybridShape(Square square){
this.square = square;
}
public HybridShape(Circle circle){
this.circle = circle;
}
public void drawSquare(){
square.drawSquare();
}
public void drawCircle(){
circle.drawCircle();
}
}
Java中类不允许多继承,但是可以实现多个接口,继承关系的Adapter适配器设计模式就是利用java可以实现多个接口的特性。
JDK里面的适配器模式应用:
•java.util.Arrays#asList()
•java.io.InputStreamReader(InputStream)
•java.io.OutputStreamWriter(OutputStream)
•javax.xml.bind.annotation.adapters.XmlAdapter#marshal()
•javax.xml.bind.annotation.adapters.XmlAdapter#unmarshal()
相关文章推荐
- JAVA设计模式系列之Adapter(适配器)-Java基础-Java-编程开发
- 设计模式--学习笔记--适配器模式Adapter--基础篇
- 设计模式(Design Patterns)-可复用面向对象软件的基础 06:适配器模式(Adapter)
- 设计模式循序渐进(基础篇2)模式编程法则
- 黑马程序员--Java基础学习笔记【单例设计模式、网络编程、反射】
- 编程基础设计与算法-24种设计模式和7大原则
- 【小松教你手游开发】【面试必读(编程基础)】几种常用的设计模式介绍
- 【设计模式基础】结构型模式 - 1 - 适配器(Adapter)
- JAVA基础--网络编程与设计模式
- 【面试必读(编程基础)】几种常用的设计模式介绍
- Android 内功心法(番外)——写在设计模式前,面对对象编程基础
- 【编程素质】设计模式-适配器模式(Adapter)
- js基础对象-编程模式与设计模式
- 编程基础之设计模式
- JAVA操作数据库方式与设计模式应用-Java基础-Java-编程开发
- 设计模式之适配器(Adapter)---类对象结构型模式
- Java设计模式:Adapter(适配器)
- 设计模式袖珍版 连续转载之 - Adapter(适配器)
- 设计模式---Adapter模式
- 设计模式——Adapter模式