了解设计模式 之 结构模式(一) -- 适配器模式

设计模式中的结构模式是关于结构的,包括聚合,组合,继承等等,主要使用这些结构来表示程序的逻辑,主要包括下面这些模式:适配器模式(Adapter),桥接模式(Bridge),组合模式(Composite),装饰模式(Decorator),外观模式(Facade),享元模式(Flyweight),代理模式(Proxy)。下面的一些列文章将会逐个讲述。

首先来了解一下适配器模式。

1. 适配器模式(Adapter Pattern)

适配器模式就是两个对象之间的接口的适配,使两个接口不兼容的类可以一起工作,举一个现实点的例子。

比如说朋友去日本出差,让他捎回来一个笔记本,可是这个笔记本使用的是110V的电压,并且用的是两项的插槽,这个时候就要用一个电源适配器了,笔记本插在电源适配器上,适配器接到一个220V的三项的插座上。这个就是一个适配器的例子,在程序中,也可以模拟这种结构,也就实现了适配器模式了。

上边的这个过程用Java语言来进行描述的话,如下所示:

首先是二项插头应该使用的两项插座接口。

	// 两项插座
public interface Term2PlugSocket {

public void plugin2term();

}


但是现在家里只有三项插座。

	// 三项插座
public class Term3PlugSocket {

public void plugin3term() {
System.out.println("plug in 3 term socket");
}

}


所以就需要一个2-3项的适配器了。

	// 2-3项插座适配器
public class Term2to3Adapter implements Term2PlugSocket {

private Term3PlugSocket term3PlugSocket = null;

public Term2to3Adapter(Term3PlugSocket term3PlugSocket) {
this.term3PlugSocket = term3PlugSocket;
}

@Override
public void plugin2term() {
System.out.println("execute adapter action");

// 调用目标的方法
term3PlugSocket.plugin3term();
}

}


最后是两项插头,这个相当于Client。

	// 两项插座
public class Term2Connector {

// 把插头插入插座
public void connect() {
Term3PlugSocket term3PlugSocket = new Term3PlugSocket();

// 2-3项插座适配器
Term2PlugSocket adapter = new Term2to3Adapter(term3PlugSocket);

// 适配3项插座
adapter.plugin2term();
}

public static void main(String[] args) {
Term2Connector connector = new Term2Connector();
connector.connect();
}

}


适配器模式的定义是:将一个类的接口转换成了客户端需要的接口,使不兼容的接口可以一起工作。

另外,还有一个进一步的话题需要讨论一下,适配器模式其实是分两种的,对象适配器(Object adapter)和类适配器(Class adapter)。上边的例子是对象适配器,而Java是不支持类适配器的,因为类适配器是需要多重继承的。

下面给出适配器模式的类图。

对象适配器:
[img]http://zddava.iteye.com/upload/attachment/77243/d768bdef-ca8e-32be-abdf-fe57307052fd.jpg[/img]

类适配器:
[img]http://zddava.iteye.com/upload/attachment/77247/a4dcf734-6ee9-3a7d-bad9-267c37b62db1.jpg[/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值