设计模式1:适配器模式

啥叫适配器

举个栗子,我的是安卓手机,室友的是苹果手机,我的安卓机子只能用我的安卓数据线来充电,而不能使用室友的苹果数据线,但是我想借助某种工具(不知道有没有这种东东...),让我的安卓手机可以用室友的苹果数据线来充电,可以帮我们达到这个目的的工具就是适配器。通俗来说,适配器就是把原来不匹配的东西变成匹配的东西的一个中间件。

而适配器模式,就是借用适配器思想的一种开发模式

可以分为三类

类适配器

对象适配器

接口适配器

类适配器

通过继承来实现适配器功能。

现在有两个数据线(两个接口)

interface android{
	
	void chargeAndroid();
}

interface iphone{
	
	void chargeIphone();
}

我的安卓手机是只能用安卓数据线(实现接口)

class Android implements android{

	@Override
	public void chargeAndroid() {
		// TODO Auto-generated method stub
		
	}
}

现在我想找个适配器,让我的手机也能使用苹果数据线。这个时候我们只需要在继承Android的基础上实现 iphone接口就行了

class Adapter extends Android implements iphone{

	@Override
	public void chargeIphone() {
		
	}
	
}

这时候我们的适配器就完成了,既可以使用安卓手机充电(chargeAndroid方法),也可以使用苹果手机充电(chargeIphone方法)啦!

对象适配器

组合的思想来实现适配器

同样有两根数据线(两个接口)

interface android{
	
	void chargeAndroid();
}

interface iphone{
	
	void chargeIphone();
}

安卓充安卓(接口实现类)

class Android implements android{

	@Override
	public void chargeAndroid() {
		// TODO Auto-generated method stub
		
	}
}

接下来就是区别于类适配器的地方了,在类适配器中,我们主要利用了继承的方式来实现适配器。现在我们不妨换种思路,因为我们已经有了一个安卓的实现类,这个类有个chargeAndroid方法,因此在我们的适配器中可以增加一个Android的对象属性,然后在构造函数中给该属性初始化,这样我们就可以通过这个对象来调用chargeAndroid方法啦

class Adapter implements iphone{
	
	private Android android;
	
	public Adapter(Android android) {
		this.android = android;
	}

	@Override
	public void chargeIphone() {
		// TODO Auto-generated method stub
		
	}
	
}

接口适配器

通过抽象类来实现适配器, 和起前面提到的两种有些区别。

设想一个场景,现在有一种超级充电器接口,它有许多方法,可以给安卓,苹果,电脑,mp3,ipad等等一系列产品充电,但是我只需要它能充安卓和iphone就行了,其他的方法我用不到。如果我们直接实现该接口的的话,那么我们就要实现它的所有方法,即便我把用不到的方法直接写个括号,也会让我们的程序比较臃肿,而且调用起来也不方便。因此我们可以用一个抽象类来实现这个接口,在抽象类中把所有方法置空,然后在用一个子类来继承该类,然后重写我们需要使用的那几个方法即可,这个抽象类就是我们的适配器。

超级充电器接口

interface wire{
	
	void chargeAndroid();
	void chargeIphone();
	void chargeComputer();
	void chargeMp3();
	
}

适配器(抽象类)

abstract class Adapter implements wire{
	
	public void chargeAndroid(){}
	public void chargeIphone(){}
	public void chargeComputer(){}
	public void chargeMp3(){}
	
}

实现类

class Charge extends Adapter{
	public void chargeAndroid(){
		System.out.println("charge android。。");
	}
	public void chargeIphone(){
		System.out.println("charge iphone。。");
	}
	
}

适配器模式应用场景

类适配器与对象适配器的使用场景一致,仅仅是实现手段稍有区别,二者主要用于如下场景:

  (1)想要使用一个已经存在的类,但是它却不符合现有的接口规范,导致无法直接去访问,这时创建一个适配器就能间接去访问这个类中的方法。

  (2)我们有一个类,想将其设计为可重用的类(可被多处访问),我们可以创建适配器来将这个类来适配其他没有提供合适接口的类。

  以上两个场景其实就是从两个角度来描述一类问题,那就是要访问的方法不在合适的接口里,一个从接口出发(被访问),一个从访问出发(主动访问)。

接口适配器使用场景:

  (1)想要使用接口中的某个或某些方法,但是接口中有太多方法,我们要使用时必须实现接口并实现其中的所有方法,可以使用抽象类来实现接口,并不对方法进行实现(仅置空),然后我们再继承这个抽象类来通过重写想用的方法的方式来实现。这个抽象类就是适配器。

 

参考资料 https://www.cnblogs.com/V1haoge/p/6479118.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值