设计模式 适配器模式

原文链接: 设计模式 适配器模式

上一篇: java 的 mysql 数据库 SqlHelper辅助类

下一篇: 设计模式 外观模式

单向适配器

4b6b4f38ea80f80c1cd4cd5388a7d41cac0.jpg

双向适配器

fb42babf03a19291aa5de85499a6b8ce787.jpg

package ahao.design;

/*
 * 适配器模式
 * 定义:
 * 	将一个类的接口转换成客户希望的另外一个接口,适配器模式使得原本由于接口不兼容
 * 而不能一起工作的那些类可以一起工作
 * 
 * 功能: 转换匹配,复用已有功能,可以在转换时适当调整参数
 * 	本质: 转换匹配,复用功能
 */

//适配器,将Adaptee适配为需要的Target
public class Adapter implements Target {
	// 需要持有适配对象
	Adaptee adaptee;

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

	public static void main(String[] args) {
		Adaptee adaptee = new AdapteeImp();
		Adapter adapter = new Adapter(adaptee);
		adapter.request();
	}

	@Override
	public void request() {
		adaptee.doSomething();
	}
}

// 已存在并被实现的接口
interface Adaptee {
	void doSomething();
}

class AdapteeImp implements Adaptee {
	@Override
	public void doSomething() {
		System.out.println("adapteeImp");
	}
}

// 特定的接口
interface Target {
	void request();
}

// 双向适配器
class TwoWayAdapter implements Adaptee, Target {
	// 持有两个接口
	Adaptee adaptee;
	Target target;

	// 构造方法,传入两个适配对象
	public TwoWayAdapter(Adaptee adaptee, Target target) {
		super();
		this.adaptee = adaptee;
		this.target = target;
	}

	//相互适配
	@Override
	public void doSomething() {
		target.request();
	}

	@Override
	public void request() {
		adaptee.doSomething();
	}
}

功能主要是进行转换匹配, 目的是复用已有的功能, 而不是来实现新的接口

适配器的实现方式其实是依靠对象组合的方式,通过给适配器对象组合被适配的对象,然后当客户端调用Target的时候,适配器会把相应的功能委托给被适配的对象去完成

开发中适配器也可以实现一些Adaptee没有实现但是在Target中定义的功能,称为智能适配器.

可以适配多个Adaptee,也就是说实现某个新的Target的功能时,需要调用多个模块的功能,适配多个模块的功能才能满足新街口的要求

双向适配器

同时实现了Target和Adaptee的接口,使得双向适配器可以在Target或Adaptee被使用的地方使用, 已提供对所有客户的透明性,尤其是两个不同的客户需要用不同的方式查看同一个对象时,适合使用双向适配器

使用时机:

想使用一个已经存在但接口不符合所需标准的类

想创建一个可以复用的类,这个类可能和一些不兼容的类一起工作

相关模式:

适配器和桥接:

结构相似,功能完全不同

适配器模式是把两个或者多个接口的功能进行转换匹配, 而桥接模式是让接口和实现部分相分离,以便他们可以独立的变化

适配器和装饰模式

都使用的对象组合的方式, 都可以在转调组合对象的功能前后进行一些附加的处理,

一般适配器适配过后是需要改变接口的, 如果不改接口就没有必要适配了, 而装饰模式是不改接口的,无论多少层装饰器都是一个接口,因此装饰模式很容易支持递归

适配器和代理

两个可以组合使用, 在实现适配器的时候,可以使用代理来调用Adaptee, 这样可以获得更大的灵活性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值