适配器模式

简介:适配器模式是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能

使用场景:一个实体对象不仅拥有自身的功能,还需要别的实体的功能。这种情况就需要用到适配器进行连接,使这个实体实现多功能。适配器模式经常使用依赖。

下面的例子是一个“门”和“防盗器材”之间的关系。单纯的“门”只有关和闭的功能,不具有防盗的能力。但是为了安全,我们希望自己家的门不仅仅可以打开和关闭,也需要具有防盗功能。这时,就需要适配器模式了,将门的功能和防盗功能结合在一起,组成“防盗门”。

/**
 *门,两个方法:开和关。
 */
public interface Door {
	void open();
	void close();
}


/**
 *防盗
 */
interface AntiTheft{
	//只有一个方法:防盗方式
	void antiTheafWay();
}

/**
 * 防盗有两种不同的设备,一种是监控器,一种是报警器。但都具有防盗的功能。
 */

/**
 *监控器,使用监控器防盗
 */
class Monitor implements AntiTheft{
	@Override
	public void antiTheafWay() {
		System.out.println("使用监控器防盗");
		
	}
}

/**
 *报警器,使用报警器防盗
 */
class  Alarm implements AntiTheft{
	@Override
	public void antiTheafWay() {
		System.out.println("使用报警器防盗");
		
	}
}

/**
 *创建一个防盗的适配器,在构造方法中确定使用哪种防盗器材。
 */
class AntiTheftAdapter implements Door{
	private AntiTheft antiTheft;

	public AntiTheftAdapter(String type) {
		
		if(type!=null&&type.equalsIgnoreCase("Alarm")){
			antiTheft=new Alarm();
		}
		
		if(type!=null&&type.equalsIgnoreCase("Monitor")){
			antiTheft=new Monitor();
		}
		
	}

	@Override
	public void open() {
		if(antiTheft!=null){
			System.out.print("门打开了");
			antiTheft.antiTheafWay();
		}
		
	}

	@Override
	public void close() {
		if(antiTheft!=null){
			System.out.print("门关闭了");
			antiTheft.antiTheafWay();
		}
	}
}

class RedDoor implements Door{
	//适配器作为属性
	private AntiTheftAdapter adapter;

	@Override
	public void open() {
		//首先判断有无防盗适配器,如果有,则执行防盗适配器中的open()方法。否则,执行普通方法。
		if(adapter!=null){
			adapter.open();
		}else{
			System.out.println("打开没有防盗功能的门");
		}
		
	}

	@Override
	public void close() {
		if(adapter!=null){
			adapter.close();
		}else{
			System.out.println("关闭没有防盗功能的门");
		}
	}

	public AntiTheftAdapter getAdapter() {
		return adapter;
	}

	public void setAdapter(AntiTheftAdapter adapter) {
		this.adapter = adapter;
	}
}

主方法:

public class Main {
	public static void main(String[] args) {
		RedDoor door=new RedDoor();
		AntiTheftAdapter adapter=new AntiTheftAdapter("monitor");
		door.setAdapter(adapter);
		door.close();
		door.open();
		System.out.println("------------------------");
		
		RedDoor door2=new RedDoor();
		door2.close();
		door2.open();

	}
}

运行结果:

门关闭了使用监控器防盗
门打开了使用监控器防盗
------------------------
关闭没有防盗功能的门
打开没有防盗功能的门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值