《Java与模式》学习笔记之四——适配器(Adapter)模式
2011-12-29 11:47
183 查看
适配器模式(Adapter Pattern)[GOF95]把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
问题:
我们已经在应用程序中设计了接口sampleOperation1, 然后我们又为了加快开发而购买了可以很好的完成此功能的第三方库, 然而第三方库的接口sampleOperation2和我们设计的接口sampleOperation1不同, 为了使这些接口不兼容的类可以一起工作, 我们应用Adapter模式将第三方库的接口sampleOperation2转换为我们的接口sampleOperation1
(也是客户希望的接口).
适配器模式有两种形式.
一、 类的适配器模式
类图:
![](http://blog.csdn.net/images/blog_csdn_net/surprisesdu/%E7%B1%BB%E7%9A%84%E9%80%82%E9%85%8D%E5%99%A8%E6%A8%A1%E5%BC%8F.jpg)
源代码:
package com.designpatterns.adapter;
/**
* 目标角色, 相当于我们的应用程序, sampleOperation1是我们开放给客户的接口
* @author suki
*/
public interface Target {
public void sampleOperation1();
}
/**
* 源角色,相当于第三方库
* @author suki
*/
public class Adaptee {
public Adaptee() {
}
public void sampleOperation2()
{
System.out.println("Adaptee.sampleOperation2()");
}
}
/**
* 适配器角色
* 把第三方库的接口sampleOperation2转化为我们开放给客户的接口sampleOperation1
* * @author suki
*/
public class Adapter extends Adaptee implements Target {
public void sampleOperation1() {
this.sampleOperation2();
}
}
/**
* 客户端类
* @author suki
*/
public class Client {
public static void main(String[] args) {
Adaptee adaptee = new Adaptee();
Target target = new Adapter();
target.sampleOperation1();
}
}
源代码:
package com.designpatterns.adapter;
/**
* 目标角色, 相当于我们的应用程序, sampleOperation1是我们开放给客户的接口
* @author suki
*/
public interface Target {
public void sampleOperation1();
}
/**
* 源角色,相当于第三方库
* @author suki
*/
public class Adaptee {
public Adaptee() {
}
public void sampleOperation2()
{
System.out.println("Adaptee.sampleOperation2()");
}
}
/**
* 适配器角色
* 把第三方库的接口sampleOperation2转化为我们开放给客户的接口sampleOperation1
* * @author suki
*/
public class Adapter extends Adaptee implements Target {
public void sampleOperation1() {
this.sampleOperation2();
}
}
/**
* 客户端类
* @author suki
*/
public class Client {
public static void main(String[] args) {
Adaptee adaptee = new Adaptee();
Target target = new Adapter();
target.sampleOperation1();
}
}
二、 对象的适配器模式
在类的适配器模式中Adapter采用继承的方式复用Adaptee的接口,而在对象的适配器模式中Adapter则采用组合的方式实现Adaptee的复用
类图:
![](http://blog.csdn.net/images/blog_csdn_net/surprisesdu/%E5%AF%B9%E8%B1%A1%E7%9A%84%E9%80%82%E9%85%8D%E5%99%A8%E6%A8%A1%E5%BC%8F.jpg)
源代码:
package com.designpatterns.adapterofobject;
/**
* 目标角色, 相当于我们的应用程序, sampleOperation1是我们开放给客户的接口
* @author suki
*/
public interface Target {
public void sampleOperation1();
}
/**
* 源角色,相当于第三方库
* @author suki
*/
public class Adaptee {
public Adaptee() {
}
public void sampleOperation2() {
System.out.println("Adaptee.sampleOperation2()");
}
}
/**
* 适配器角色
* 把第三方库的接口sampleOperation2转化为我们开放给客户的接口sampleOperation1
* @author suki
*/
public class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee)
{
super();
this.adaptee = adaptee;
}
public void sampleOperation1() {
adaptee.sampleOperation2();
}
}
/**
* 客户端类
* @author suki
*/
public class Client {
public static void main(String[] args) {
Adaptee adaptee = new Adaptee();
Target target = new Adapter(adaptee);
target.sampleOperation1();
}
}
问题:
我们已经在应用程序中设计了接口sampleOperation1, 然后我们又为了加快开发而购买了可以很好的完成此功能的第三方库, 然而第三方库的接口sampleOperation2和我们设计的接口sampleOperation1不同, 为了使这些接口不兼容的类可以一起工作, 我们应用Adapter模式将第三方库的接口sampleOperation2转换为我们的接口sampleOperation1
(也是客户希望的接口).
适配器模式有两种形式.
一、 类的适配器模式
类图:
![](http://blog.csdn.net/images/blog_csdn_net/surprisesdu/%E7%B1%BB%E7%9A%84%E9%80%82%E9%85%8D%E5%99%A8%E6%A8%A1%E5%BC%8F.jpg)
源代码:
package com.designpatterns.adapter;
/**
* 目标角色, 相当于我们的应用程序, sampleOperation1是我们开放给客户的接口
* @author suki
*/
public interface Target {
public void sampleOperation1();
}
/**
* 源角色,相当于第三方库
* @author suki
*/
public class Adaptee {
public Adaptee() {
}
public void sampleOperation2()
{
System.out.println("Adaptee.sampleOperation2()");
}
}
/**
* 适配器角色
* 把第三方库的接口sampleOperation2转化为我们开放给客户的接口sampleOperation1
* * @author suki
*/
public class Adapter extends Adaptee implements Target {
public void sampleOperation1() {
this.sampleOperation2();
}
}
/**
* 客户端类
* @author suki
*/
public class Client {
public static void main(String[] args) {
Adaptee adaptee = new Adaptee();
Target target = new Adapter();
target.sampleOperation1();
}
}
源代码:
package com.designpatterns.adapter;
/**
* 目标角色, 相当于我们的应用程序, sampleOperation1是我们开放给客户的接口
* @author suki
*/
public interface Target {
public void sampleOperation1();
}
/**
* 源角色,相当于第三方库
* @author suki
*/
public class Adaptee {
public Adaptee() {
}
public void sampleOperation2()
{
System.out.println("Adaptee.sampleOperation2()");
}
}
/**
* 适配器角色
* 把第三方库的接口sampleOperation2转化为我们开放给客户的接口sampleOperation1
* * @author suki
*/
public class Adapter extends Adaptee implements Target {
public void sampleOperation1() {
this.sampleOperation2();
}
}
/**
* 客户端类
* @author suki
*/
public class Client {
public static void main(String[] args) {
Adaptee adaptee = new Adaptee();
Target target = new Adapter();
target.sampleOperation1();
}
}
二、 对象的适配器模式
在类的适配器模式中Adapter采用继承的方式复用Adaptee的接口,而在对象的适配器模式中Adapter则采用组合的方式实现Adaptee的复用
Interface Target +sampleOperation1:void |
Adaptee +sampleOperation2:void |
Adapter -adaptee:Adaptee +Adapter +sampleOperation1:void |
![](http://blog.csdn.net/images/blog_csdn_net/surprisesdu/%E5%AF%B9%E8%B1%A1%E7%9A%84%E9%80%82%E9%85%8D%E5%99%A8%E6%A8%A1%E5%BC%8F.jpg)
源代码:
package com.designpatterns.adapterofobject;
/**
* 目标角色, 相当于我们的应用程序, sampleOperation1是我们开放给客户的接口
* @author suki
*/
public interface Target {
public void sampleOperation1();
}
/**
* 源角色,相当于第三方库
* @author suki
*/
public class Adaptee {
public Adaptee() {
}
public void sampleOperation2() {
System.out.println("Adaptee.sampleOperation2()");
}
}
/**
* 适配器角色
* 把第三方库的接口sampleOperation2转化为我们开放给客户的接口sampleOperation1
* @author suki
*/
public class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee)
{
super();
this.adaptee = adaptee;
}
public void sampleOperation1() {
adaptee.sampleOperation2();
}
}
/**
* 客户端类
* @author suki
*/
public class Client {
public static void main(String[] args) {
Adaptee adaptee = new Adaptee();
Target target = new Adapter(adaptee);
target.sampleOperation1();
}
}
相关文章推荐
- 《Java与模式》学习笔记之四——适配器(Adapter)模式
- 《Java与模式》学习笔记:设计模式——适配器(Adapter)模式
- adapter(适配器)模式
- 适配器(Adapter)模式
- 设计模式--适配器(Adapter)
- 架构设计之设计模式 (一) 适配器(Adapter)---提高复用性
- 设计模式(二)-适配器模式(Adapter Pattern)——加个“适配器”以便于复用
- Java设计模式透析之 —— 适配器(Adapter)
- java设计模式之— 适配器(Adapter)
- 适配器(Adapter)模式
- Java:设计模式之适配器Adapter(续)
- Adapter(适配器)--类对象结构型模式
- 设计模式袖珍版 连续转载之 - Adapter(适配器)
- 【初学设计模式】Object Adapter (对象适配器)
- Java23种设计模式--Adapter(适配器)
- 设计模式C++描述----06.适配器(Adapter)模式
- SqlDataAdapter适配器的用法(ADO.NET无连接模式访问数据库)
- 设计模式--适配器(Adapter)模式
- PHP设计模式之适配器(Adapter)
- java演示适配器(adapter)模式