前言
适配器模式是两个不复杂的接口之间的基本结构模式。主要功能是将一个类的接口转化成希望的其他一个接口。
适配器模式
适配器模式定义一个包装类,用于包装不兼容接口的对象,主要作用是把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作。
示例
正好在学习适配器模式,看有个相关的示例,于是记录下来,分享给大家。
举例如下:
某软件系统中,已设计并实现了用于显示地址信息的类 Address(如图 下图 所示),现要 求提供基于 Dutch 语言的地址信息显示接口。为了实现该要求并考虑到以后可能还会出现新 的语言的接口,决定采用适配器(Adapter)模式实现该要求,得到如图所示的类图。
分析
首先我们文中的两个类创建出来,创建结果如下: Address类
class Address { public void street() { System.out.println("Address---street"); } public void zip() { System.out.println("Address---zip"); } public void city() { System.out.println("Address---city"); } }
DutchAddress类
class DutchAddress { public void straat() { System.out.println("DutchAddress----straat"); } public void postcode() { System.out.println("DutchAddress----postcode"); } public void plaats() { System.out.println("DutchAddress----plaats"); } }
DutchAddressAdapter适配器类,需要继承DutchAddress。
class DutchAddressAdapter extends DutchAddress { private Address address; public DutchAddressAdapter(Address addr) { address = addr; } @Override public void straat() { address.street(); } @Override public void postcode() { address.zip(); } @Override public void plaats() { address.city(); } }
运行测试
如下两个方法,点击运行测试,会将DutchAddress 转换成Address。
public static void main(String[] args) { Address address = new Address(); DutchAddress dutchAddress = new DutchAddressAdapter(address); System.out.println("The DutchAddress"); testDutch(dutchAddress); } public static void testDutch(DutchAddress addr) { addr.straat(); addr.postcode(); addr.plaats(); }
输出结果如下: