Java|Java接口设计模式
一、前言
转眼间,Java系列文章更到了第6篇,其实也不难发现,笔者是以有过编程基础的同学为基准来进行Java知识点的选择和讲解,按笔者习惯,虽说在某篇文章完成后,笔者已经有了下一周的文章主题选择,但在之后的几天思考中,难免又觉得主题选择过于简单,因此经常违背自己在文章中所写的下周文章主题而开辟新的主题,对于这一点,笔者将会在近期列出自己本学期剩余时间的文章主题清单,使文章更新更加规范。
二、引入
通过之前的学习,我们知道接口的作用在于作为系统与外界交互的窗口,概念容易理解,但是如何合理设计接口呢?Java开发者们提出了一系列的设计模式来辅助我们设计接口,其中包括:定制服务模式、适配器模式、代理模式等等,各类设计模式针对不同情况各有各的特点,那么首先我们要了解的一种设计模式就是——定制服务模式。
三、模式详解
说起定制服务模式,我们首先要了解定制服务,相信大家也不难理解,在我们如今的现实生活中,定制服务无处不在,例如银行会给顾客提供不同的定制理财套餐、某些app会给不同类型的会员提供不同的定制权限清单等等,接下来我将以我当初学习此模式时所用到的电信公司的示例来进行讲解。
如下表是电信公司为个人用户定制的两款宽带服务套餐,对客户来说,只需要选择自己所需要的服务,不必再浪费钱购买多余服务;对于电信公司来说,只需要给相应的客户提供特定的服务,不必提供多余服务。
极速精英套餐 | 金融专网套餐 |
---|---|
宽带上网服务(限速2MB) 在线杀毒服务 50MB邮箱服务 | 电信金融专网服务(限速1MB) 在线杀毒服务 28MB网络硬盘服务 5MB邮箱服务 |
付费:2999元无限包年;或者140元无限包月 | 付费:3000元无限包年;或者150元无限包月 |
那在面向对象的软件开发领域,当一个系统向外提供多种类型的服务时,一种方式是设计粗粒度的接口,一种方式是设计精粒度的接口,对于前者而言,是将所有服务放到一个接口中声明,所有的使用者都访问同一个接口,但显得其过于臃肿;对于后者而言,我们将相关的服务放到一个接口中,通过对接口的继承,可以派生出新的接口,从而为定制化需求提供特定接口。
不难发现,精粒度的接口设计有两项重要优点,一是可以减轻软件维护成本,假如某一精粒度的接口必须发生改变,它只会影响一小部分的使用该接口的用户;二是其更有利于接口的重用,通过继承接口,我们就可以方便生成针对某一定制需求的复合接口。
我们已经了解过接口设计中定制服务模式的理念,那么在实际应用中呢?我们回到之前的电信公司的例子,我们将服务类型抽象成了5个精粒度接口:宽带上网服务BoardbandService、网络硬盘服务NetworkDiskService
、在线杀毒服务VirusKillingService、邮箱服务MailboxService和金融专网服务FinacialNetworkService。而电信公司所提出的SuperSpeedCombo和FinanceCombo两种套餐则是继承以上五个精粒度的接口而成,具体代码示例如下:
SuperSpeedCombo.java
public interface SuperSpeedCombo
extends BoardbandService,
VirusKillingService,MailboxService{...}
FinanceCombo.java
public interface FinanceCombo
extends FinacialNetworkService,
VirusKillingService,
MailboxService,NetworkDiskService{...}
通过以上方式,我们就运用了定制服务模式中的精粒度接口的思想合理的设计了适用于定制需求的接口,其基本思想就是针对不同客户的不同需求运用基本服务类型接口的继承组成复合接口,从而设计出定制组合套餐接口,满足客户需求。
四、总结
接口的合理设计对于软件开发具有至关重要的作用,前人通过总结,归纳出了诸多接口设计的模式,本次文章只是给大家一个思想引入,具体其它模式的学习还希望大家自行搜索,由于小编水平有限,讲不到的地方,还请读者们自行补充,若文中理论或者代码有错误,希望大家及时联系小编进行修正,谢谢大家!