应用开发的结构浅析----一个基于Proxy-Stub模式的例子

当我们学会了Android的语法,了解了Android的基础知识以后,我们可以很容易的编写相应的功能,这个过程可以百度,Google。但这些都是针对Android系统提供的API进行封装,这些对于初学者来说是很重要的,也是一个初级开发者应备的条件,但是当我们想要编写一个APP时,如何组织工程代码结构是更重要的,这对于我们复用相同的功能代码,减少我们的开发工作量至关重要。所以,本文我们从一个例子入手,介绍如何组织我们的程序结构,使得编写的代码更高效。如有错误,欢迎指正。

这里我们以播放MP3为例,最简单的情况下,我们直接调用MediaPlayer来完成播放停止的功能。结构如图1。

                                                          

                                                                                     图1

这里,我们直接在MainActivity中调用MediaPlayer的API实现对MP3的控制,主要代码如下:


当然这里的业务比较简单,我们可以直接这么做,但这样做使得类之间的耦合比较严重,当业务复杂或者想要更换新的播放引擎时候就需要修改大量的代码,或者重新编写,这就增加了开发的工作量和扩展的代价。因此这样的结构是不够合理的,那么我们就需要进行修改。

为了减小类之间的耦合,增加一个中间类,结构如图2:

                                       

                                                                            图2

增加了一个MpImpl类,封装了play()和stop()函数,在该类中去调用MediaPlayer的函数,这样将MediaPlayer和MainActivity分开,降低了耦合,但是当MediaPlayer变化时,同时需要修改MpImpl类,还是很麻烦,于是接着修改结构,如图3:

                                         

         图3

增加了一个抽象类Stub,提供了play()和stop()抽象接口让子类去实现,同时提供onExecute()函数给MainActivity使用。关键代码如下:

MainActivity.java

Stub.java

在MainActivity端将播放和停止进行编码,在Stub中进行解码。经过这样的抽象以后,MainActivity将需要的业务(这里是播放和停止)以抽象函数方式抽象出来,加入到Stub类中,MainActivity便只需关注业务的接口即可,而无需关注业务的具体实现,大大减小了耦合,使得结构更加清晰。经过修改后,耦合度是大大降低了,但是MainActivity和Stub需要进行编码和解码的处理,而且这个过程比较晦涩,不易阅读,能不能将这一过程屏蔽掉,而只关注业务呢?当然可以,下面我们继续抽象。如图4.

                                       

                                                                                           图4

先看Stub一侧,为了减小MainActivity与Stub的耦合,增加了Plugin这个抽象类,屏蔽了onExecute()函数,只提供execute()函数供外部调用,有的看官可能会问了,那么MainActivity与Plugin的耦合怎么办呢,有办法,再增加一个接口来解决。结构如图5.

                                             

                                                                                         图5

关键代码如下:

IPlugin.java

Plugin.java


这样MainActivity只需要通过接口IPlugin便可以完成对MP3的播放与停止操作,而无需考虑播放与停止的细节,但是却需要考虑编码的细节,因此,继续修改。结构如图6.

                                       

                     图6

关键代码如下:

Proxy.java

将编码的细节放在Proxy类中,   MainActivity只需继承Proxy类,调用与业务相关的play()和stop()函数即可,不需要关注繁琐的编码情况了,简化了MainActivity的开发。到此整个过程就结束了,本文从一个简单的例子分析了一个应用结构的设计 过程,由简单到复杂, 这个原理在Android的框架体系中到处可见,学会了它对我们理解Android框架很有帮助。   

                                               










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值