`
jiaguwen123
  • 浏览: 415280 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

适配器模式

阅读更多

适配器模式就是基于客户提供的接口和功能,再此基础上实现具体业务功能。

它大体分为两类:类适配器与对象适配器

1.类适配器

   类适配器就是本着在客户提供功能接口与业务BO的基础上实现业务功能。

  该类需要继承第三方类并实现定义的接口,再在这个接口的方法实现中调用父类(即第三方类)中需要用到的方法。

先举个例子,我们每次登录QQ时,都会获取当天的新闻信息,假如我们定义一个通用的Customer,它包含有qnumber,loginDate,friends三个属性

public class Customer {
	private String qnumber;// Q号
	private Date loginDate;// 登录日期
	private List friends;// 获得好友信息
	public Customer(String qnumber, Date loginDate, List friends) {
		super();
		this.qnumber = qnumber;
		this.loginDate = loginDate;
		this.friends = friends;
	}

	public List getFriends() {
		return friends;
	}

	public void setFriends(List friends) {
		this.friends = friends;
	}

	public Date getLoginDate() {
		return loginDate;
	}

	public void setLoginDate(Date loginDate) {
		this.loginDate = loginDate;
	}

	public String getQnumber() {
		return qnumber;
	}

	public void setQnumber(String qnumber) {
		this.qnumber = qnumber;
	}

}

 

 

  再有就是一个业务功能接口

public interface LoginEvent {
	//登录时获取新闻信息
	public void getNews();
}

  

这个事件就是当客户端登录时自动获得新闻信息,那么这时假哪QQ客户端有多种可能性,如Linux下的客户或者Windows下的客户端.

我们分别定义这两个类为

.LinuxCustomer

.WindowsCustomer

 

为了能够让这两个对象都能够实现当它们登录时都能够获得登录信息,我们就可以通过继续Cutomer并实现接口LoginEvent.

 

 

public class LinuxCostomer extends Customer implements LoginEvent{
	public LinuxCostomer(String qnumber, Date loginDate, List friends) {
		super(qnumber, loginDate, friends);
	}
	public void getNews() {
		doGetNews();
	}
	//处理获得信息
	private void doGetNews(){
		
	}
	public static void main(String[] args) {
		LinuxCostomer lc = new LinuxCostomer("272401534",new Date(0),new ArrayList());
		lc.getNews();
	}
}

 这就是类适配器,它就是继承业务对象(Customer)并实现业务功能接口(LoginEvent).

 

2.对象适配器

 如果开发者提供的只是抽象类,而不提供接口(很多时候抽象类都会预先实现了一些比较烦琐的业务功能,使我们不用再去一一实现它,那样会带给我们很多方便)。这个时候我们就只能通过继续抽象类,并把业务对象当做参数传递进去进行调用,这便就是对象适配器

例子代码如下:

  开发者只提供的抽象类的LoginEvent

public abstract class LoginEvent {
	//网络连接
	public void connectInternet(){
//		init();
//		....and so on...
	}
	//登录时获取新闻信息
	public abstract void getNews();
}

 

而LinuxCustomer(Linux客户登录端)为了能够获取新闻信息并且包含有登录端相应的属性,我们可以通过建立如下适配器LinuxCostomer实现:

 

public class LinuxCostomer extends LoginEvent{
	private Customer customer;
	public LinuxCostomer(Customer customer) {
		 this.customer= customer;
	}
	public void getNews() {
		doGetNews();
	}
	//处理获得信息
	private void doGetNews(){
		
	}
	public static void main(String[] args) {
		LinuxCostomer lc = new LinuxCostomer(new Customer("272401534",new Date(0),new ArrayList()));
		lc.getNews();
	}
}

 

通过把Customer当做参数传递给LinuxCustomer同时继承抽象类LoginEvent,重载该类的获得新闻方法getNews

 

这种方式就是对象适配器模式。

同理linux下系统可能分为各种各样的系统如red hat,solaris等

我们就可以通过继承LinuxCustomer这个适配器,然后再去实现相应的业务功能。

 

 

总结:

 其实这种开发形式在我们日常开发中很常见,只是有时候我们还不清楚而已。

    类适配器是通过继承类适配者类实现的,另外类适配器实现客户类所需要的接口。当客户对象调用适配器类方法的时候,适配器内部调用它所继承的适配者的方法。

    对象适配器包含一个适配器者的引用与类适配器相同,对象适配器也实现了客户类需要的接口。当客户对象调用对象适配器的方法的时候,对象适配器调它所包含的适配器者实例的适当方法。

它们的区别就下图:

源类----目标类----适配器类

分享到:
评论

相关推荐

    JAVA设计模式(抽象类与适配器模式)

    今天我们要探讨的是JAVA设计中的两个重要模式:抽象类与适配器模式。 首先,我们来理解一下“抽象”。抽象是面向对象编程的核心概念之一,它帮助我们处理对象的复杂性。在Java中,抽象通常通过抽象类来实现。抽象类...

    设计模式之适配器模式Java实现和类设计图

    在这个Java实现中,我们将深入探讨适配器模式的两大类型:类适配器模式和对象适配器模式,并通过具体的代码示例和UML类图来阐述其工作原理。 首先,我们来理解适配器模式的基本概念。适配器模式就像现实生活中的...

    设计模式之适配器模式

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在解决系统间的兼容性和接口不匹配问题时。适配器模式的核心思想是将一个类的接口转换成客户希望的另一个接口,使原本由于接口不兼容而无法...

    设计模式 - 适配器模式(C++实例)

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在解决系统间的兼容性和接口不匹配问题时。适配器模式的核心思想是将一个类的接口转换成客户希望的另一个接口,使原本由于接口不兼容而无法...

    java 动态代理模式 适配器模式

    Java动态代理模式与适配器模式是两种在软件设计中常用的设计模式,它们都有各自的优点和应用场景。在Java中,动态代理模式主要依赖于Java的反射API和InvocationHandler接口,而适配器模式则用于解决不同接口之间的...

    java设计模式之适配器模式

    适配器模式是一种在软件工程中广泛使用的结构型设计模式,它允许两个不兼容的接口之间进行通信。在Java中,适配器模式扮演着重要的角色,尤其在处理遗留代码或者第三方库集成时,能够有效地解决接口不匹配的问题。...

    java中适配器模式案例

    适配器模式是一种设计模式,它允许不兼容的类或接口之间进行通信,通过创建一个适配器类作为中间桥梁,使得原本不匹配的接口能够协同工作。在Java中,适配器模式广泛应用于系统集成、旧代码复用以及第三方库的兼容性...

    适配器模式案例代码

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在这个案例中,我们关注的是如何通过适配器模式解决实际编程问题。文章《适配器模式案例代码》提供了具体的实现示例,链接指向了CSDN博主...

    设计模式-适配器模式(讲解及其实现代码)

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在处理系统集成、遗留代码重用以及不同接口之间兼容性问题时。适配器模式的主要目的是将两个不兼容的接口融合在一起,使得原本无法直接协作...

    适配器模式demo源码

    适配器模式是一种常用的设计模式,它在软件开发中起到了桥梁的作用,允许两个不兼容的接口之间进行通信。在这个“适配器模式demo源码”中,我们可以深入理解这一模式的实现方式及其应用场景。 适配器模式的核心思想...

    设计模式系列之适配器模式

    适配器模式是一种软件设计模式,它在不同的接口之间起到了桥梁的作用,使得原本由于接口不兼容而无法协作的类能够协同工作。这种模式的核心思想是将一个类的接口转换成客户希望的另一个接口,从而使原有类能适应新的...

    设计模式的适配器模式的例子

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,允许不同接口的类之间进行通信。适配器模式的核心思想是将一个类的接口转换成客户期望的另一个接口,使得原本由于接口不兼容而无法一起工作的类...

    实验七:适配器模式.rar

    适配器模式是一种软件设计模式,它允许两个不兼容的接口之间进行通信。在本实验中,我们将深入探讨适配器模式的概念、应用场景以及如何在实际编程中实现它。适配器模式通常分为类适配器和对象适配器两种形式。 ...

    适配器模式源代码

    适配器模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,允许不兼容的接口之间进行通信。在这个源代码实例中,我们看到的是如何通过适配器模式来实现不同对象之间的协作,使得原本无法直接交互的系统组件...

    设计模式C++学习之适配器模式(Adapter)

    适配器模式(Adapter)是软件工程中一种常用的设计模式,它允许两个不兼容的接口之间进行通信。在C++编程中,适配器模式能够帮助我们复用现有的类,或者将第三方库的接口与我们的系统接口进行对接,从而提高代码的可...

Global site tag (gtag.js) - Google Analytics