java设计模式笔记(1)-适配器模式

适配器的定义

适配器就是一个接口转换器,它可以是一个独立的硬件接口设备,允许硬件或电子接口与其它硬件或电子接口相连,也可以是信息接口。比如:电源适配器、三角架基座转接部件、USB与串口的转接设备等。

两种模式:

  • 类适配器模式:使用继承的适配器 接口
  • 对象适配器模式:使用委托的适配器 抽象类

涉及角色:

  • 源角色(Adaptee):需要适配的类
  • 目标角色(Target):想要得到的接口
  • 适配器(Adapter):转换装置

类适配器模式例子

源角色

public class Banner {
	private String string;
	
	public Banner(String string) {
		this.string = string;
	}
	
	public void showWithParen() {
		System.out.println("(" + string + ")");
	}
	
	public void showWithAster() {
		System.out.println("*" + string + "*");
	}
}

目标角色

public interface Print {
	void printWeak();
	
	void printStrong();
}

适配器

public class PrintBanner extends Banner implements Print{
	public PrintBanner(String string) {
		super(string);
	}
	
	@Override
	public void printWeak() {
		showWithParen();
	}

	@Override
	public void printStrong() {
		showWithAster();
	}
}

测试类

public class Main {
	public static void main(String[] args) {
		Print p = new PrintBanner("Hello");
		p.printWeak();
		p.printStrong();
	}
}

打印输出

(Hello)
*Hello*

对象适配器模式

目标角色

public abstract class Print {
	public abstract void printWeak();
	public abstract void printStrong();
}

适配器

public class PrintBanner extends Print{
	private Banner banner;
	
	public PrintBanner(String string) {
		banner = new Banner(string);
	}
	
	
	@Override
	public void printWeak() {
		banner.showWithAster();
	}

	@Override
	public void printStrong() {
		banner.showWithParen();
	}
}

适配器的优点

系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。

适配器的缺点

过多的使用适配器,会让系统非常零乱,不易整体进行把握。

使用场景

  • 旧版本适配新版本,旧版本经过测试已经稳定运行很久。在更新版本时,想要抛弃旧版本,又要兼容旧版本,就可以使用适配器模式来适配旧版本对象
  • 功能不同的类使用适配器进行转换,使得类可以使用。
  • 让现有的类适配新的接口

参考链接:

[1]http://www.cnblogs.com/java-my-life/archive/2012/04/13/2442795.html

[2]结城浩.图解设计模式[M].北京:人民邮电出版社,2017.P14-P22.

原文地址:https://www.cnblogs.com/rookie404/p/6291420.html