Adapter Design Pattern
基本概念:
适配器模式可以帮助你让两个互不兼容的接口协同工作,适配器模式使用的场景是当你想让两个不兼容的类和接口应用在一起协同工作的时候。适配器这个名字说明了一切。
模式中提供的接口可能不相兼容,但是他里边的功能需要吻合(suit the need).
在现实世界中,浮现在我脑海中的最容易最简单的例子就是旅行电源适配器了,美国的插座盒插头和英国的不同
它们的接口不能协同在一起工作,英国的插头是圆形的,美国的是方格形的,你可以用一个适配器来让美国的插头在
英国的插座(圆形)上工作在一起
怎样实现一个适配器设计模式?
实现一个适配器模式有两种方式,一个是利用继承的方法,还有一个是关联(composition)的方法,虽然两种实现的机制不同但是
解决的目的是一样的。
用继承实现的适配器:
当一个类有不互不兼容的方法需要被另一个类使用时,你可以用继承的方式去创建一个适配器类:
这个继承的适配器类需要有新的兼容的方法,使用这个适配器的新方法可以使基类核心的功能可以被访问。
这是典型的"is-a"关系,下面是显示生活中用java实现继承的例子,不用太担心这些逻辑,下面的例子
将试图以最简单的方式去解释适配器模式:
//圆形插座
public class CylindricalSocket {
public String supply(String cylinStem1, String cylinStem1) {
System.out.println("Power power power...");
}
}
//方形的适配器继承圆形的插座
public class RectangularAdapter extends CylindricalSocket {
public String adapt(String rectaStem1, Sting rectaStem2) {
//some conversion logic
String cylinStem1 = rectaStem1;
String cylinStem2 = rectaStem2;
return supply(cylinStem1, cylinStem2);
}
}
//方形的插头
public class RectangularPlug {
private String rectaStem1;
private String rectaStem2;
public getPower() {
RectangulrAdapter adapter = new RectangulrAdapter();
String power = adapter.adapt(rectaStem1, rectaStem2);
System.out.println(power);
}
}
适配器模式在关联关系中的实现
上边的实现也可以使用关联去实现,这种方式,以基类属性的方式创建在适配器中代替继承,
你可以像属性一样访问它的所有方法,这也是"has-a"的关系,下面的例子阐述这种方式,
唯一不同的是适配器类和其他的两个类是相同的,在大部分的场景下,关联关系的实现比继承更友好
用关联的方式会让你改变类的行为更容易。他允许使用常用的工具比如依赖注入:
public class CylindricalSocket {
public String supply(String cylinStem1, String cylinStem1) {
System.out.println("Power power power...");
}
}
public class RectangularAdapter {
private CylindricalSocket socket;
public String adapt(String rectaStem1, Sting rectaStem2) {
//some conversion logic
socket = new CylindricalSocket();
String cylinStem1 = rectaStem1;
String cylinStem2 = rectaStem2;
return socket.supply(cylinStem1, cylinStem2);
}
}
public class RectangularPlug {
private String rectaStem1;
private String rectaStem2;
public getPower() {
RectangulrAdapter adapter = new RectangulrAdapter();
String power = adapter.adapt(rectaStem1, rectaStem2);
System.out.println(power);
}
}
适配器设计模式在java api中的使用
java.io.InputStreamReader(InputStream)
java.io.OutputStreamWriter(OutputStream)
http://javapapers.com/design-patterns/adapter-pattern/
- Thinking in Java -- Bruce Eckel
- Design Patterns in Java -- Bob Tarr
- The Design Patterns Java Companion -- James W.Copper
- Design Patterns -- Gang of Four
- Singletons Are Evil -- http://c2.com/cgi/wiki?SingletonsAreEvil
- Singletons Are Good -- http://c2.com/cgi/wiki?SingletonsAreGood
- When is a singleton not a singleton? -- http://www.javaworld.com/javaworld/jw-01-2001/jw-0112-singleton-2.html
- The forum of JavaRanch Big Saloon --http://www.javaranch.com/cgi-bin/ubb/forumdisplay.cgi?action=topics&forum=OO,+Patterns,+UML+and+Refactoring&number=9
2803

被折叠的 条评论
为什么被折叠?



