Android设计模式--外观模式

问题:在Android中,Apk可以有微信,QQ为代表的插件式安装更新功能;

那么问题来了,,主系统(姑且这么说)调用插件式安装的子系统,由子系统提供对外的访问,属不属于一种外观模式呢?

先说设计模式:

1、定义:

为子系统中的一组接口提供一个统一接口;

Facade模式定义了一个高层接口,这个接口使得这子系统更容易使用。

2、目的:

降低对子系统的复杂度和依赖。这使得子系统更易于使用和管理。

提高代码的质量,代码维护性,扩展性。

3、设计:

在设计之初,就要有意识的将两个不同的层面分离,层与层之间建立外观的Facade,增加一个Facade可以提供一个简单的接口减少他们之间的依赖。

这我们在Android编程的时候,可以有意识的将数据访问和业务逻辑层严格分离开来,使得设计更加的低耦合。

尤其是对子系统的维护上,子系统越来越大时,外观模式尤为重要!

4、简单的demo:

首先是子系统:

package com.example.demo.Facade;/** * 子系统设计 * @author qubian * @data 2015年6月9日 * @email naibbian@163.com * */public abstract class Lottery {protected abstract String getLotteryName() ;protected abstract String getLotteryNum() ;protected abstract String getRandomNum() ;}package com.example.demo.Facade;public class SSQLottery extends Lottery{@Overrideprotected String getLotteryName() {return "SSQ";}@Overrideprotected String getLotteryNum() {return "3";}@Overrideprotected String getRandomNum() {return "6";}}package com.example.demo.Facade;public class DLTLottery extends Lottery{@Overrideprotected String getLotteryName() {return "DLT";}@Overrideprotected String getLotteryNum() {return "1";}@Overrideprotected String getRandomNum() {return "7";}}

然后是Facade以及使用:

package com.example.demo.Facade;/** * 外观模式 * 统一对外访问 * @author qubian * @data 2015年6月9日 * @email naibbian@163.com * */public class Facade {SSQLottery ssq;public String getLotteryName(String name){if (name.equalsIgnoreCase("SSQ")) {ssq = new SSQLottery();}return ssq.getLotteryName();}}package com.example.demo.Facade;import android.util.Log;public class UseFacade {public void use(){Facade facade = new Facade();Log.i("TAG", facade.getLotteryName("SSQ"));}}demo 写的好像太简单了,不过,外观模式确实也算是用的比较多的,而且比较简单的模式;

按照我的理解;

从某种意义上来说,将插件式安装理解成一种外观模式,似乎显得跟简单,定义太浅显了一些,

插件式的安装目的是为了启动子系统,除了唤起子系统以外,却很少会由主系统调用到子系统内部的方法,当然也不排除有这样的情况,

若有则不太符合插件式安装与更新的目的;所以确实有些无解了。

问题先留在此处了。

一个背包,几本书,所有喜欢的歌,

Android设计模式--外观模式

相关文章:

你感兴趣的文章:

标签云: