2.设计模式之适配器模式:适配老版本接口和第三方接口

本文通过实例展示了适配器模式在系统升级过程中的作用,如何解决新旧接口不兼容问题。适配器模式允许旧的实现类与新的接口协同工作,简化了代码维护,降低了理解和维护成本。此外,还提到了在对接第三方库如Redis时,如何通过适配器将第三方API转换为符合自身DAO接口风格的实现,提高代码复用性和可扩展性。
摘要由CSDN通过智能技术生成

adapter

场景介绍:
(1)假设我们做了一个第一版的一个系统,这个系统里有一个接口和实现类
(2)接着我们开始做的第二个版本,这个系统我们定义了一个新的接口,和新的实现类
(3)但是我们同时在第二个版本的系统中,也要使用第一版系统中定义的那个老接口和老实现类

不用设计模式的实现

package com.zhss.designpattern.adapter;

/**
 * 不用设计模式的实现
 *
 */
public class WithoutAdapterPatternDemo {
	
	public static void main(String[] args) {
		
		OldInterface oldObject = new OldInterfaceImpl();
		
		NewInterface newObject = new NewInterfaceImpl();
		oldObject.oldExecute();
		newObject.newExecute();
	}

	/**
	 * 老版本的接口
	 *
	 */
	public static interface OldInterface{
		void oldExecute();
	}
	
	/**
	 * 老版本接口的实现类
	 *
	 */
	public static class OldInterfaceImpl implements OldInterface{

		public void oldExecute() {
			System.out.println("老版本接口实现的功能逻辑");
		}
		
	}
	
	
	/**
	 * 新版本的接口
	 *
	 */
	public static interface NewInterface{
		void newExecute();
	}
	
	/**
	 * 新版本接口的实现类
	 *
	 */
	public static class NewInterfaceImpl implements NewInterface{

		public void newExecute() {
			System.out.println("新版本接口实现的功能逻辑");
		}
		
	}
}

如果不用任何设计模式,我们的问题在哪儿?
问题其实很明显,就是说,我们的新代码中,融合了新老两套接口,很麻烦的一个事情
 首先如果你这么干的话,就会造成代码很复杂,面向的是规范和风格完全不同的两套接口,你理解和维护的成本提高了
其次,假如说,现在都不给你选择使用老版本接口的机会
直接强制性公司规范要求按照新版本接口走,你的老版本接口的实现类,就没法用了
难不成还要基于新版本的接口重新写一套。

适配器实现

package com.zhss.designpattern.adapter;

/**
 * 适配器模式demo
 * 
 *
 */
public class AdapterPatterDemo {

	public static void main(String[] args) {
		NewInterface oldObject = new NewInterfaceAdapter(new OldInterfaceImpl());
		NewInterface newObject = new NewInterfaceImpl();
		oldObject.newExecute();
		newObject.newExecute();
	}

	/**
	 * 定义一个适配器类
	 * 
	 *
	 */
	public static class NewInterfaceAdapter implements NewInterface {

		private OldInterface oldObject;

		public NewInterfaceAdapter(OldInterface oldObject) {
			this.oldObject = oldObject;
		}

		public void newExecute() {
			oldObject.oldExecute();
		}

	}

	/**
	 * 老版本的接口
	 * 
	 * @author liyutao
	 *
	 */
	public static interface OldInterface {
		void oldExecute();
	}

	/**
	 * 老版本接口的实现类
	 * 
	 *
	 */
	public static class OldInterfaceImpl implements OldInterface {

		public void oldExecute() {
			System.out.println("老版本接口实现的功能逻辑");
		}

	}

	/**
	 * 新版本的接口
	 * 
	 *
	 */
	public static interface NewInterface {
		void newExecute();
	}

	/**
	 * 新版本接口的实现类
	 * 
	 *
	 */
	public static class NewInterfaceImpl implements NewInterface {

		public void newExecute() {
			System.out.println("新版本接口实现的功能逻辑");
		}

	}
}

在实际企业开发中的使用场景

这个模式一般是在系统不断升级的过程中使用,对已经写好的老的类,写一套适配器来适配老类,但是提供新的接口,这个我们在后面系统升级的时候,可以去实践。在项目阶段二的时候,会去实践的,真的有版本升级的时候,才可以完美的去演示这个模式的使用效果。

还有一种情况,是对于已有的第三方类库,比如redis的客户端,或者是elasticsearch的客户端,他们提供了一套API,但是我们这里的要求是需要面向我们这里的DAO接口来进行编程,此时可以写一个适配器,将比如redis客户端的接口适配到我们的接口,这个我们会在本次课程来实践。

比如我们的DAO接口,要求的接口风格都是:save、update、remove、list、get,这些方法风格

DAORedisImpl,redis客户端,get、set、mset、mget,一套接口;适配器,DAORedisImpl就是一个适配器,这个适配器实现的是我们的DAO接口,在我们的save、update、remove等方法中,去调用redis客户端的get、set、mset、mget等方法。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值