`
行者买刀
  • 浏览: 194134 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

设计模式之略见一斑(适配器模式Adapter)

    博客分类:
  • J2SE
阅读更多


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

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

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这个适配器,然后再去实现相应的业务功能。

 

 

总结:

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

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

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

它们的区别就下图:

 

  • 大小: 15.7 KB
分享到:
评论

相关推荐

    21种设计模式略见一斑

    《21种设计模式略见一斑》这篇文章和配套的"行者买刀21种设计模式详解.pdf"文件,是面向IT专业人士,尤其是软件开发者的一份珍贵资源,旨在深入理解并掌握软件设计中的核心概念——设计模式。设计模式是经验丰富的...

    设计模式之略见一斑(Observer观察者模式)

    在软件开发中,设计模式是解决常见问题的模板,它们为程序员提供了一种标准化的解决方案,使得代码更易于理解和维护。本篇文章将深入探讨“Observer”观察者模式,这是一种行为设计模式,它定义了对象之间的一对多...

    CRC16或32校验

    CRC的全称为Cyclic Redundancy Check,中文名称为循环冗余校验。它是一类重要的线性分组码,编码...例如我们读软盘上的文件,以及解压一个ZIP文件时,偶尔会碰到“Bad CRC”错误,由此它在数据存储方面的应用可略见一斑

    2021-2025年中国避雷器行业调研及竞合策略研究报告.pdf

    报告的核心内容可从提供的“部分内容”中略见一斑,以下是对报告内容的详细解读: 一、企业竞合策略概述 报告首先介绍了避雷器行业竞合策略研究的背景、研究原则与方法,并阐述了研究企业竞合策略的重要性和实践...

    成语大全带解释.doc

    10. **略见一斑**:形容从局部可以推测到整体的一部分情况。 11. **有口皆碑**:形容人们对某人或某事的赞扬之声普遍且一致。 12. **并行不悖**:两个或多个事情可以同时进行,彼此之间并不冲突。 13. **白璧微瑕**...

    高二语文试卷山东济宁02-03年上学期高二语文期末考试[精选].doc

    3. 字形题:识别并改正错别字,如"略见一斑"、"死不瞑目"、"文过饰非"、"不肖子孙"等。 4. 成语运用:正确使用成语,如"大方之家"、"兵不血刃"、"声誉鹊起"、"噤若寒蝉"等,同时考查成语的含义和适用情境。 5. 词语...

    高一语文上册第二单元综合测试1[精选].doc

    1. 语文基础知识:题目涉及到词语辨析,如“心酸”与“辛酸往事”,“一般”与“略见一斑”,“过度”与“过渡时期”,“无谓”与“无私无畏”,“家世”与“处理家事”,“明智”与“淡泊明志”,“灌注”与...

    小学生易错字及生僻字总结.doc

    6. 略见一斑:从一点细微之处就能看出整体的情况或品质。 7. 班门弄斧:在专家面前卖弄自己的技能,暗示自不量力。 8. 英雄辈出:形容一个时代或群体中不断涌现出杰出的人物。 9. 并行不悖:两件事物同时进行而互不...

    280个容易读错、写错、用错的成语要点.doc

    12. "略见一斑"(lüè jiàn yī bān):从部分看出整体,通过局部了解全局。 13. "暴虎冯河"(bào hǔ píng hé):形容有勇无谋,冒险行事。 14. "有口皆碑"(yǒukǒu jiē bēi):形容人人称赞,具有很高的...

    现场活动大屏幕系统v1.1806221.zip

    《现场活动大屏幕系统v1.1806221》是一款专为现场活动设计的多媒体展示系统,它的核心功能在于提供一个高效、稳定且易于操作的大屏幕展示平台。这款系统能够帮助活动组织者在活动现场实时展示各种信息,如活动进程、...

    怀念母亲练习题.docx

    - (3) "我当时的想法,从这几段文字中也可以看出一点" 可以替换为 "言外之意,略见一斑"。 2. 动词填空: - ① "暗夜渐渐__上天空,__上对面的屋顶" 可以填入 "爬上,爬满",表达夜晚降临的情景。"一切都__在朦胧...

    容易用错的成语一览表.doc

    4. **黯然失色**:形容相比之下显得差远了,不如别人。同义词有“相形见绌”、“大相径庭”。反义成语如“光彩夺目”、“不相上下”。 5. **慷慨激昂**:形容精神振奋,情绪高昂,充满正气。同义词有“热血沸腾”、...

    小学语文成语大全及其解释.pdf

    10. **略见一斑**:从局部看出事物的一部分特征,了解其大概。 11. **有口皆碑**:所有人都称赞,形容事迹或人品受到普遍赞扬。 12. **并行不悖**:两件事情可以同时进行,互不冲突。 13. **白璧微瑕**:完美的事物...

    曲周事业单位招聘2018年考试真题及答案解析考试版(1).docx

    "略见一斑"意味着事情的端倪已经显现,“光明灿烂”和“辉煌”均形容美好前景,但前者更侧重于未来的可能性,后者侧重于实际的辉煌成就。因此,选B:希望光明,光明璀璨。 8. 经济形势描述:第八题中,“内热外冷”...

    高一语文洞察世道沧桑测试[精选].doc

    - 《红楼梦》是中国古代四大名著之一,属于章回体小说,现有120回,前80回由曹雪芹创作,后40回一般认为是高鹗续写。曹雪芹,原名霑,字梦阮。《红楼梦》以贾、史、王、薛四大家族的兴衰为背景,以贾宝玉和林黛玉的...

    CRC算法与实现.doc

    例如,我们读软盘上的文件,以及解压一个 ZIP 文件时,偶尔会碰到“Bad CRC”错误,由此它在数据存储方面的应用可略见一斑。 CRC 的优点 CRC 的优点在于编码和解码方法简单,检错和纠错能力强,在通信领域广泛地...

    小学语文成语大全及其解释.doc

    10. **略见一斑**:通过部分了解整体,形容对事物的初步认识。 11. **有口皆碑**:所有人都称赞,表示对某人或某事的普遍好评。 12. **并行不悖**:两件事情同时进行,并不互相冲突。 13. **白璧微瑕**:比喻美好的...

    年高一年级语文下册第二次段考试卷.doc

    题目2考察学生对汉字书写的准确性,如"烦燥"应为"烦躁"、"甜言密语"应为"甜言蜜语"、"颓垣"、"略见一班"应为"略见一斑"、"莫钟一是一言既出,驷马难追"中"莫钟一是"可能是错误,正确可能是"莫衷一是"。 3. 成语运用...

    2015_2016学年高中语文课时训练10雷雨鲁人版必修4

    3. 字形校正:题目中还包含了错别字的纠正,如A项中的“烦燥”应为“烦躁”,“甜言密语”应为“甜言蜜语”,B项中的“半响”应为“半晌”,“略见一班”应为“略见一斑”,C项中的“脉膊”应为“脉搏”,“歪风斜气...

Global site tag (gtag.js) - Google Analytics