设计模式——适配器模式

                                  

一、适配器模式动机:

在现实生活中,经常存在一些不兼容的事物。如某些电器的工作电压与家庭交流电电压不一致、网络速度与计算机处理速度不一致、某硬件设备提供的接口与计算机支持的接口不一致等。在这种情况下,我们可以通过一个新的设备来使原本不兼容的事务可以在一起工作,这个新的设备称之为适配器。在软件开发中,也存在一下不一致的情况,同样,也可以通过这种称之为适配器模式的设计模式解决问题。

二、适配器模式定义:

将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器。

三、适配器模式分类:

类适配器模式和对象适配器模式。

 

1、类适配器模式结构图:

设计模式——适配器模式_第1张图片

由类适配器模式结构图知,在类适配器中,提供了一个适配器类Adapter,适配器类实现了抽象目标类的接口,并继承了适配者类Adaptee,在适配器类的request()方法中调用了所继承的适配者的specificRequest()方法,实现了适配的目的。 因为适配者类与适配器是继承关系,所以这种适配器模式被称为类适配器模式。

适配器类:Adapter

public class Adapter extends Adaptee implements Target{
	public void request() {
		specificRequest();
	}
}

目标接口:

public interface Target{
	public void request();
}

适配者类:

public class Adptee {
	public void specificRequest() {
		System.out.println("想要的请求");
	}
}

 

测试类:

public class Client {
	public static void main(String[] args) {
		Target target = new Adapter();
		target.request();
	}
}

类适配器模式的优点:

(1)将目标类与适配者类解耦,通过引入一个适配器类来重用现有的适配者类,而无需修改原有代码。
(2)增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端来说是透明的,而且提高了适配者的复用性。
(3)灵活性和扩展性都非常好,通过使用配置文件,可以很方便地更换适配器,也可以在不修改原有代码的基础上增加新的适配器类,完全符合“开闭原则”。
(4)有与适配器类时适配者的子类,因此可以在适配器类中置换一些适配者的方法,使得适配器的灵活性更强。

类适配器的缺点:

对于Java、C#等不支持多重继承的语言,一次最多只能适配一个适配者类,而且目标抽象类只能为接口,不能为类,其使用有一定的局限性,不能将一个适配者类和它的子类同时适配到目标接口

2.对象模式结构图

设计模式——适配器模式_第2张图片

由对象适配者模式结构图知,在对象适配器中,提供了一个适配器类Adapter,该类继承了抽象目标类,并且包含了一个适配者实例,从而将客户端与与适配者衔接起来,在适配器的request()方法调用适配者的specificRequest()方法。因为适配器类与适配者类时关联关系,所以这种适配器模式被称为对象适配器模式。

对象适配器类:

public class Adapter extends Target{

	//引用适配者类
	private Adaptee adaptee;
	public Adapter(Adaptee adaptee) {
		this.adaptee = adaptee;
	}
	public void request() {
		adaptee.speicificRequest();
	}

}

抽象目标类:Target

public abstract class Target {
	public abstract void request();
}

适配者类:Adaptee

public class Adaptee {
	public void speicificRequest() {
		System.out.println("真正想要的方法!!!");
	}
}

测试类:Client

public class Client {
	
	public static void main(String[] args) {
		Adaptee adaptee = new Adaptee();
		Target target = new Adapter(adaptee);
		target.request();
	}
}

对象适配器的优点:

也具有类适配器的(1)(2)(3)一致。
对象适配器可以把多个不同的适配者适配到同一个目标,也就是说,同一个适配器可以把适配者类和它的子类同时适配到目标接口。
对象适配器的缺点:
(1)与类适配器相比,要想置换适配者类的方法不容易。
(2)如果一定要置换掉适配者类的一个或多个方法,就只好先做一个适配者类的子类,将适配者类的方法置换掉,然后在把适配者类的子类当作真正的适配者进行适配,实现过程较为复杂。

四:模式适用的环境

(1)系统需要使用现有的类,而这些类的接口不符合系统的需要。
(2)想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。

 

 

 

 

 

 

 

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

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