一.设计模式简介
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。
二.设计模式的使用
设计模式在软件开发中的两个主要用途。
1.开发人员的共同平台
设计模式提供了一个标准的术语系统,且具体到特定的情景。例如,单例设计模式意味着使用单个对象,这样所有熟悉单例设计模式的开发人员都能使用单个对象,并且可以通过这种方式告诉对方,程序使用的是单例模式。
2.最佳的实践
设计模式已经经历了很长一段时间的发展,它们提供了软件开发过程中面临的一般问题的最佳解决方案。学习这些模式有助于经验不足的开发人员通过一种简单快捷的方式来学习软件设计。
三.设计模式的类型
设计模式的类型
根据设计模式的参考书 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素)中所提到的,总共有23种设计模式。这些模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。当然,我们还会讨论另一类设计模式:J2EE 设计模式。
设计模式之间的关系如下图所示:
四.适配器模式
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。
五.适配器实例应用
在前文中简单介绍了适配器模式的基本概念,在这一部分通过一段实例代码来展示适配器模式在实际中的应用。安卓中适配器的使用是非常常见的,下面将介绍两种实际应用中的Adapter实例代码。
1. ListView
①案例代码目标:将左图控件中用户填写的信息按照属性读取存储进数据库关系表的相关列,再从数据库的关系表中读取数据,将其显示在ListView控件中。
②适配器的实现:
1) 获取控件内容,写入数据库
2) 从数据库中查询数据,将数据写入字符串数组data
3) 将字符串数组中的值通过ArrayAdapter,显示在ListView控件中.
其中ArrayAdapter在安卓中为适配器的实现类,可以直接使用。2.RecyclerView
ListView的扩展性相较于RecyclerView不够好,它只能实现数据纵向滚动的效果,如果我们想实现横向滚动和瀑布流的话,ListView是做不到的。
①案例代码目标:将左图控件中用户填写的借款信息按照属性读取存储进数据库关系表的相关列,再从数据库的关系表中读取数据,将其显示在RecyclerView控件中。
②适配器的实现:
1)获取控件内容,写入数据库
2)自定义适配器类在RecyclerView中每一行的显示格式
3)获取自定义每一行要显示的控件,从数据库中读取的数据,将其显示在控件中
4)定义RecyclerView中行行之间的样式,横向滚动或者为瀑布流
六.总结
Adapter 模式的经典实现在于将原本不兼容的接口融合在一起,使之能够很好的进行合作。但是,在实际开发中,Adapter模式也会可以根据实际情况进行适当的变更,最典型的就是 ListView 和 RecyclerView了,这种设计方式使得整个 UI 架构变得非常灵活,能够拥抱变化。所以在实际使用的时候,遵循上面说过的三种场景:
1.系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容;
2.想要建立一个可以重复使用的类,用于与一些彼此之间没有太大联系的一些类,包括一些可能在将来引进的类一起工作;
3.需要一个统一的输出接口,而输入端的类型不可预知。
Adapter模式的优点:
1.更好的复用性:系统需要使用现有的类,而此类的接口不符合系统的需要,那么通过适配器模式就可以让这些功能得到更好的复用;
2.更好的扩展性:在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。
复用性:系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。
3.低耦合:无需修改原有代码(遵循开闭原则)
Adapter模式的缺点:
如果在一个系统中过多的使用适配器模式,会让系统非常零乱,不易整体把握。例如,明明看到调用的是 A 接口,其实内部被适配成 B 类的实现,这样就增加了维护性,过多的使用就显得很没有必要了,不如直接对系统进行重构。
适配器模式在实际使用过程中有常用的“两种”方式:对象适配器和类适配器。
对象适配器:
类适配器: