最新消息

java适配器模式(Adapter)

设计模式 金牌剑客 1496℃ 0评论

功能

将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

类图

适配器分为类适配器和对象适配器,以下分别是类适配器和对象适配器类图。

1、类适配器

adapter_class

2、对象适配器

adapter_object

java代码

1、类适配器

Target.java

public interface Target {
	public void request();
}

ConcreteTarget.java

public class ConcreteTarget implements Target {
	@Override
	public void request() {
		System.out.println("This is ConcreteTarget.");
	}
}

Adaptee.java

public class Adaptee {
	public void specialRequest() {
		System.out.println("This is Adaptee.");
	}
}

Adapter.java

public class Adapter extends Adaptee implements Target {
	@Override
	public void request() {
		this.specialRequest();
	}
}

Client.java

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

因为java是单继承,所以类适配器只适合去适配目标为接口的情形。对于目标为抽象类或者是实体类时,就只能使用对象适配器了。

2、对象适配器

Adapter.java

public class Adapter implements Target {
	private Adaptee adaptee;
	public Adapter(Adaptee adaptee){
		this.adaptee = adaptee;
	}
	public void request() {
		adaptee.specialRequest();
	}
}

Client.java

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

优缺点

1、优点

1、将目标类与适配者解耦

2、增加了类的透明性,客户端调用统一的接口

3、复用了已有的类

4、一个对象适配器可以适配不同的适配者到同一目标

2、缺点

1、由于java是单集成,故类适配器一次只能适配一个适配者,并且目标仅能为接口。

2、更换对象适配器的实现比较复杂。

使用场景

1、系统需要使用现有的类,而这些类不符合系统的接口;

2、两个类有相同或相似的功能,但不具有统一的接口;

3、使用第三方组件,组件接口与系统定义的接口不一致。

转载请注明:QualInfo » java适配器模式(Adapter)

喜欢 (2)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址