Java设计模式(6)结构型:适配器模式

(一)模式概述

适配器模式是指将一个接口适配成用户所期待的新接口。该模式的宗旨是保留原有接口所提供的服务,且新接口能满足客户的期望。在实际应用中,会根据用户的需求来确定是为用户新增适配的新接口,还是修改原有接口实现适配(本文例子中均以新增接口为例)。适配器模式有两种实现方式:

1)类-适配器模式。指继承原接口的实体类,通过新增函数或重写旧函数实现接口适配。

2)对象-适配器模式。指实现原接口(非继承),新增函数或重写原方法来扩展。重点:将原接口的实体类通过对象的方式引用进来使用。


(二)模式结构

1)原接口

满足原客户端需求的接口

2)原实体类

实现原接口的对象

3)适配器实体类

在满足原接口依然可用情况下,适配出满足客户端新需求的对象


(三)Demo


类适配器模式

原接口:

public interface ISource {
	/* 原接口 */
	public void method();
}
原实体类:
public class Source {
	public void method() {
		System.out.println("this is method!");
	}
}
现在由于用户扩展,原method接口已经不再满足用户需求,此时需要适配新接口addNewMethod,在ISource接口类新增接口如下
public interface ISource {
	/* 原接口 */
	public void method();

	/* 新增适配接口 */
	public void addNewMethod();
}
适配器实体类:
public class Adapter extends Source implements ISource{
	@Override
	public void addNewMethod() {
		// TODO 自动生成的方法存根
		System.out.println("this is new method!");
	}
}
此时适配器继承原有的Source类并实现了ISource接口,重写新的接口方法addNewMethod以适配用户需求。

执行过程:

ISource adapter = new Adapter();
adapter.method();
adapter.addNewMethod();
直接结果:
this is method!
this is new method!
这样既满足了原有用户需求,又为需要适配的用户提供了实现方式。

对象适配器模式

对象适配器与类适配器唯一的不同就在于适配器的写法上,其他并无二致。

原接口:

public interface ISource {
	/* 原接口 */
	public void method();

	/* 新增适配接口 */
	public void addNewMethod();
}
原实体类:
public class Source {
	public void method() {
		System.out.println("this is method!");
	}
}
适配器实体类(与类适配区别):

public class Adapter implements ISource {
	private Source os; //将原实体类引入,不是继承

	public Adapter(Source $os) {
		os = $os;
	}

	@Override
	public void method() {
		os.method();
	}

	@Override
	public void addNewMethod() {
		System.out.println("this is new method!");
	}
}
执行过程:
Source os = new Source();
ISource adapter = new Adapter(os);
adapter.method();
adapter.addNewMethod();
执行结果:

this is method!
this is new method!

(注)由于Java的单继承的,所以在实际应用中,使用对象适配器会更好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值