适配器设计模式实现

适配器模式实现步骤

  1. 原先已经存在一个类,类里面有一个特性的方法。
  2. 系统功能扩展,对上面已有方法的调用需要改变,为了不影响原来的方法,需要新接入的方法的功能编写。
  3. 定义适配器类,将新建的方法和原有的方法结合。
  4. 调用适配器类。

案例

首先我们要创建一个 net.haicoder.adapter 包,在该包下面创建 InsuranceCreate.javaAdvancedOrderCreate.javaHotelCreate.javaFlightOrderCreate.javaOrderCreateAdapter.javaOrderCreate.javaTestMain.java 文件。

文件创建完毕,目录结构如下图:

02 适配模式代码结构图.png

InsuranceCreate.java 文件中代码如下:

package net.haicoder.adapter; /** * 前期只有保险资源订单方法 */ public class InsuranceCreate { public void createInsuranceOrder() { System.out.println("嗨客网 (www.haicoder.net)"); System.out.println("创建保险订单成功"); } }

后期酒店资源和机票资源接入进来 AdvancedOrderCreate.java 文件代码如下:

package net.haicoder.adapter; public interface AdvancedOrderCreate { /** * 创建酒店订单 */ void createHoTelOrder(); /** * 创建机票订单 */ void createFlightOrder(); }

HotelCreate.java 文件代码如下:

package net.haicoder.adapter; /** * 创建酒店订单 */ public class HotelCreate implements AdvancedOrderCreate { public void createHoTelOrder() { System.out.println("嗨客网 (www.haicoder.net)"); System.out.println("创建酒店订单成功"); } public void createFlightOrder() { } }

FlightOrderCreate.java 文件代码如下

package net.haicoder.adapter; /** * 创建机票订单 */ public class FlightOrderCreate implements AdvancedOrderCreate { public void createHoTelOrder() { } public void createFlightOrder() { System.out.println("嗨客网 (www.haicoder.net)"); System.out.println("创建机票订单成功"); } }

定义一个适配类,将创建酒店资源的方法和创建机票资源的方法管理起来,OrderCreateAdapter.java 文件代码如下:

package net.haicoder.adapter; public class OrderCreateAdapter { AdvancedOrderCreate advancedOrderCreate; public OrderCreateAdapter(String orderType) { if ("flight".equals(orderType)) { advancedOrderCreate = new FlightOrderCreate(); } else if ("hotel".equals(orderType)) { advancedOrderCreate = new HotelCreate(); } } public void createOrder(String orderType) { if ("flight".equals(orderType)) { advancedOrderCreate.createFlightOrder(); } else if ("hotel".equals(orderType)) { advancedOrderCreate.createHoTelOrder(); } else { System.out.println("嗨客网 (www.haicoder.net)"); System.out.println("对不起,您创建的订单类型目前没有开通,敬请期待。。。"); } } }

创建订单的逻辑代码如 OrderCreate.java 文件

package net.haicoder.adapter; public class OrderCreate { public void createOrder(String orderType) { if ("insurcnce".equals(orderType)) { new InsuranceCreate().createInsuranceOrder(); } else { OrderCreateAdapter orderCreateAdapter = new OrderCreateAdapter(orderType); orderCreateAdapter.createOrder(orderType); } } }

调用的测试方法如 TestMain.java 文件

package net.haicoder.adapter; public class TestMain { public static void main(String[] args) { OrderCreate orderCreate = new OrderCreate(); orderCreate.createOrder("hotel"); } }

程序运行后,控制台输出如下信息:

03 适配模式运行结果.png

适配器模式总结

设计模式中适配器模式把一个类的方法变换成客户端所期待的另一种方法,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。