将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
下面用一个例子来演示这个设计模式
实现Adapter模式的2种方法与范例
Adapter模式通过在Adapter类中调用外部组件来实现功能。
根据调用方式的不同,Adapter模式有2种实现方法:
1,通过继承实现Adapter
2,通过组合让实现Adapter
我们需要实现一个发送邮件的功能,需要用到一个名为OutMailer的外部组件,因为上述原因,我们决定用Adapter模式实现对OutMailer的透明调用。首先,我们把邮件发送的功能抽象成一个接口:
IMailer.java
interface IMailer {
//发送邮件
publicvoid sendMail();
}
然后定一个实现IMailer接口的MailerAdapter类。
下面我们来看看MailerAdapter的实现方法。
通过继承实现Adapter
MailerAdapter.java
class MailerAdapter extends OutMailer implements IMailer {
//发送邮件
public void sendMail() {
//调用OutMailer.sendMail()方法实现邮件发送
this.sendMail();
}
//这里省略其他方法
}
通过委让实现Adapter
MailerAdapter.java
class MailerAdapter implements IMailer {
private OutMailer outMailer =new OutMailer();
//发送邮件
public void sendMail() {
//调用OutMailer.sendMail()方法实现邮件发送
outMailer.sendMail();
}
//这里省略其他方法
}
不管是通过继承实现Adapter,还是通过委让实现Adapter,调用方MailerClient的调用方法完全一样,如:
MailerClient.java
IMailer mailer =new MailerAdapter();
...
mailer.sendMail();
我们可以看到,这里完全没有直接调用OutMailer,也就是说OutMailer即使被替换了,我们也不用对MailerClient做任何修改。