JAVA设计模式学习11——适配器模式

本文深入解析Java适配器模式,包括类的适配器模式和对象的适配器模式。通过具体实例展示了如何在实际编程中应用适配器模式来解决接口不匹配的问题,同时强调了组合/聚合复用原则的重要性,讨论了在不同场景下选择类适配器模式或对象适配器模式的考量。
摘要由CSDN通过智能技术生成

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

适配器模式有两种形式,的适配器模式和对象的适配器模式。我们先看类的适配器模式,类的适配器模式有以下角色:

目标(Target)角色:是期待得到的接口类型。这里谈类的适配器模式所以这个不能是类,原因是java单继承。

源(adaptee)角色:现有待适配的接口类型。

适配器(adapter)角色:适配器类模式的核心,这个角色负责把源接口转换成目标角色的接口。

类的适配器模式类图:

通过上图可以看出,组合对象Adapter持有源Adaptee的对象,利用聚合代替了继承,在Adapter里面的代码如下编写:  

package adapter;
/**
 * 
 *作者:alaric
 *时间:2013-7-21下午6:44:53
 *描述:目标类
 */
public interface Target {

	public void operate1();
	
	public void operate2();
}
package adapter;
/**
 * 
 *作者:alaric
 *时间:2013-7-21下午6:44:29
 *描述:源
 */
public class Adaptee {

	public void operate1(){
		//业务逻辑
	}
}
package adapter;
/**
 * 
 *作者:alaric
 *时间:2013-7-21下午6:44:05
 *描述:适配器类
 */
public class Adapter extends Adaptee implements Target{

	@Override
	public void operate2() {
		// 业务逻辑
		
	}

}

 适配器类继承了源类,实现了目标类在源里没有的接口,达到了适配转换作用。java是单继承的语言,这种类的适配模式往往受到使用环境的限制,在面向对象设计原则中,有一条叫做组合/聚合复用原则,讲的是尽可能使用组合和聚合达到复用的目的而不是继承,所以一般推荐用对象适配器模式达到目的,对象适配器的角色和类的适配器模式的角色没什么具体的区别,只是类图不同,对象适配器模式的类图如下:

通过上图可以看出,组合对象Adapter持有源Adaptee的对象,利用聚合代替了继承,在Adapter里面的代码如下编写: 

 

package adapter;
/**
 * 
 *作者:alaric
 *时间:2013-7-21下午6:44:05
 *描述:适配器类
 */
public class Adapter2 implements Target{

	private Adaptee adaptee;
	
	public Adapter2(Adaptee adaptee) {
		super();
		this.adaptee = adaptee;
	}

	@Override
	public void operate2() {
		// 业务逻辑
	}

	@Override
	public void operate1() {
		//调用源的方法
		adaptee.operate1();
		
	}

}

 为了不改变原有系统的实现而对目标接口需求的满足而做适配,利用具体的类的适配器模式还是对象的适配器模式,要根据具体的业务场景,如果两种都可以的话最好选择对象的适配器模式,适配器模式使得原本不能在一起工作的类在一起工作成为可能。但是对于变化很大的系统对每个接口都写一个适配器类变的很难维护,这时候应该考虑对原有代码的重构,而不是系统中存在大量的适配器类。 
 ps:最近重新学习设计模式,所写相关笔记纯属个人对书本和资料的理解,如有不到之处请大家指出,共同探讨学习设计模式。

 

 

设计模式系列目录:

 JAVA设计模式学习1——统一建模语言UML

JAVA设计模式学习2——面向对象设计原则

JAVA设计模式学习3——设计模式概述

JAVA设计模式学习4——简单工厂模式

JAVA设计模式学习5——工厂方法模式

JAVA设计模式学习6——抽象工厂模式

JAVA设计模式学习7——单例模式

JAVA设计模式学习8——建造模式

JAVA设计模式学习9——原型模式

JAVA设计模式学习10——组合模式

JAVA设计模式学习11——适配器模式

JAVA设计模式学习12——装饰器模式

JAVA设计模式学习13——代理模式

JAVA设计模式学习14——享元模式

JAVA设计模式学习15——门面模式

JAVA设计模式学习16——桥梁模式

JAVA设计模式学习17——策略模式

JAVA设计模式学习18——模版方法模式

JAVA设计模式学习19——观察者模式

JAVA设计模式学习20——责任链模式

JAVA设计模式学习21——命令模式

JAVA设计模式学习22——备忘录模式

JAVA设计模式学习23——状态模式

JAVA设计模式学习24——访问者模式

JAVA设计模式学习25——迭代器模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值