通俗易懂的适配器模式

适配器:在不改动以前接口代码或者没办法更改以前接口代码的情况下,让以前的接口适用新的需求。

个人理解:适配器模式并不是设计框架的模式,而是一种万不得已的补救措施,是在没有办法情况下采用的。条件允许的情况下,还是应该重构,而不是使用适配器去适用以前的旧代码。

案例

1、生产充电器

某一天某充电器厂商老板找到某设计师,要求设计师帮他设计一款充电器。在一番思考之后,设计师写下来如下的代码:

/**
 * 充电器接口
 * @Description 
 * @author smallking
 * @Date 2020年3月20日
 */
public interface ICharge {

	void charge();
	
}
/**
 * 安卓充电器
 * @Description 
 * @author smallking
 * @Date 2020年3月20日
 */
public class AndroidCharge implements ICharge{

	@Override
	public void charge() {
		System.out.println("安卓充电器");
	}

}
/**
 * 苹果充电器
 * @Description 
 * @author smallking
 * @Date 2020年3月20日
 */
public class AppleCharge implements ICharge{

	@Override
	public void charge() {
		System.out.println("苹果充电器");
	}

}

老板看到设计师的设计之后,觉得这个想法很不错,能挣苹果用户的钱,也能挣安卓用户的钱。于是回到公司之后,老板立马斥巨资建起了流水线,生产了起来。果不其然,生产出来的产品大卖,赚了很多钱。故事就此告一段落。

2、生产闪光灯

过了一阵子,老板又找到了设计师,要求设计师给他设计闪光灯,他想买闪光灯赚钱。设计师经过一番思考之后,写下了如下代码:

/**
 * 闪光功能接口
 * @Description 
 * @author smallking
 * @Date 2020年3月20日
 */
public interface IFlash {

	void flash();
}

public class BlingBlingFlash implements IFlash {

	@Override
	public void flash() {
		System.out.println("发出bulingbuling的闪光");
	}

}

厂长借助这个闪光灯,又大赚特赚了一笔。

3、会闪光的充电器

厂长某一天突发奇想,我的充电器大卖,闪光灯大卖。那如果我要是生产一种会闪光的充电器,那不得起飞喽?于是他又找到设计师,把自己的想法告诉了他。设计师一想,这个还不简单?于是他马上给到了厂长方案:

/**
 * 充电器接口
 * @Description 
 * @author smallking
 * @Date 2020年3月20日
 */
public interface ICharge extends IFlash{

	void charge();
	
}

让充电器接口继承IFlash接口,那么充电器不就又能充电又能闪光,成了一个会闪光的充电器了吗?但是厂长接到方案之后,却暴跳了起来:老子斥巨资,好不容易把充电器流水线搭建起来,你现在却要改造我的充电器流水线。你知道这个要花多少钱吗?这个方案我不接受!总之,以前的东西都不能改,我还要充电器能闪光。

4、适配器模式

在厂长的强硬态度之下,设计师知道,重构是行不通了,无奈之下只好拿出来了适配者模式。

/**
 * 充电器适配器类
 * @Description 
 * @author smallking
 * @Date 2020年3月20日
 */
public class ChargeAdapter implements IFlash {

	private ICharge charge;
	
	public ChargeAdapter() {
		
	}
	
	public ChargeAdapter(ICharge charge) {
		this.charge = charge;
	}

	/**
	 * 边充电 + 闪光
	 */
	public void flash() {
		charge.charge();
		System.out.println("闪光");
	}

	public ICharge getCharge() {
		return charge;
	}

	public void setCharge(ICharge charge) {
		this.charge = charge;
	}
	
}

测试代码:

class AdapterTest {
    public static void main(String[] args) {
    	
    	// 生产一个苹果充电器
    	ICharge appleCharge = new AppleCharge();
    	// 生产一个安卓充电器
    	ICharge androidCharge = new AndroidCharge();
    	
    	// 苹果装入适配器
    	ChargeAdapter adapter1 = new ChargeAdapter();
    	adapter1.setCharge(appleCharge);
    	
    	// 安卓装入适配器
    	ChargeAdapter adapter2 = new ChargeAdapter();
    	adapter2.setCharge(androidCharge);
    	
    	adapter1.flash();
    	adapter2.flash();
    }
    
}

厂长看到方案之后,又露出了资本家的微笑。这才对嘛,以前的东西都建了好了,我才不去改它,我宁愿新建一个适配器,这样多省事。 但是厂长不知道的是,这样发发展下去,迟早有一天,他的工厂集团会乱作一团。

以上就是个人对于适配器模式的理解,如有不对,请指出探讨。

你可能感兴趣的:(设计模式)