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

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

先说设计模式:

1、定义:

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

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

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{ @Override
protected String getLotteryName() {
return "SSQ";
} @Override
protected String getLotteryNum() {
return "3";
} @Override
protected String getRandomNum() {
return "6";
} }
package com.example.demo.Facade; public class DLTLottery extends Lottery{ @Override
protected String getLotteryName() {
return "DLT";
} @Override
protected String getLotteryNum() {
return "1";
} @Override
protected 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设计模式(九)--外观模式的更多相关文章

  1. 设计模式之 外观模式详解(Service第三者插足,让action与dao分手)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 各位好,LZ今天给各位分享一 ...

  2. 每天一个设计模式-2 外观模式(Facade)

    每天一个设计模式-2  外观模式(Facade) 1.生活中的示例 客户想要购买一台电脑,一般有两种方法: 1.自己DIY,客户需要知道组成电脑的所有电子器件,并且需要熟悉那些配件,对客户要求较高. ...

  3. C#设计模式(11)——外观模式(Facade Pattern)

    一.引言 在软件开发过程中,客户端程序经常会与复杂系统的内部子系统进行耦合,从而导致客户端程序随着子系统的变化而变化,然而为了将复杂系统的内部子系统与客户端之间的依赖解耦,从而就有了外观模式,也称作 ...

  4. 乐在其中设计模式(C#) - 外观模式(Facade Pattern)

    原文:乐在其中设计模式(C#) - 外观模式(Facade Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 外观模式(Facade Pattern) 作者:webabcd 介绍 ...

  5. Android 设计模式之MVC模式

    说到Android设计模式的MVC模式,估计很多人都是比较熟悉了,这里深入了解一下MVC到底是怎么回事,以ListView为例子讲解. 一.深入理解MVC概念 MVC即Model-View-Contr ...

  6. 8.4 GOF设计模式三: 外观模式 Facade

    GOF设计模式三: 外观模式 Facade  “现有系统”功能强大.复杂,开发“新系统”需要用到其中一部分,但又要增加一部 分新功能,该怎么办?4.1 Facade Pattern: Key Fea ...

  7. 北风设计模式课程---外观模式(Facade)总结

    北风设计模式课程---外观模式(Facade)总结 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 设计模式都是对生活的抽象,比如用户获得装备,我可以先装备 ...

  8. js设计模式——2.外观模式

    js设计模式——2.外观模式

  9. python设计模式之外观模式

    python设计模式之外观模式 系统会随着演化变得非常复杂,最终形成大量的(并且有时是令人迷惑的)类和交互,这种情况并不少见.许多情况下,我们并不想把这种复杂性暴露给客户端.外观设计模式有助于隐藏系统 ...

  10. Java设计模式菜鸟系列(九)外观模式建模与实现

    转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39805735 外观模式(Facade):是为了解决类与类之间的依赖关系的,像spring一 ...

随机推荐

  1. counter 计数器

    包含了两个属性和一个方法: 1. counter-reset 2. counter-increment 3. counter()/counters()   counter-reset(主要作用就是给计 ...

  2. bash脚本条件测试总结

    一.if语句的结构 分为以下三种:单分支.双分支.多分支 单分支if语句 if CONDITION is True: then 分支 fi 双分支if语句 if CONDITION is True: ...

  3. 如何优雅的设计 React 组件

    作者:晓冬 本文原创,转载请注明作者及出处 如今的 Web 前端已被 React.Vue 和 Angular 三分天下,一统江山十几年的 jQuery 显然已经很难满足现在的开发模式.那么,为什么大家 ...

  4. js同时使用多个分隔符分割字符串.

    利用正则分割,str.split(/reg/);如果有这样一个字符串: "jb51.net,google.com,baidu.com_weibo.com_haotu.net", 我 ...

  5. 在昆明网络SEO的走向站外的优化该何去何从?

    昨天大概讲了SEO的站内优化,今天我们来讲讲网站站外的优化. 站外主要以第三平台为主,其中包含站外推广:常规推广.外链建设:利用第三方平台优化关键词排名: 1.博客平台,现在有好多博客平台是很不错的, ...

  6. spring AOP 和自定义注解进行身份验证

    一个SSH的项目(springmvc+hibernate),需要提供接口给app使用.首先考虑的就是权限问题,app要遵循极简模式,部分内容无需验证,用过滤器不能解决某些无需验证的方法 所以最终选择用 ...

  7. 微软Connect(); 2017大会梳理:Azure、数据、AI开发工具

    在今天召开的 Connect(); 2017 开发者大会上,微软宣布了 Azure.数据.AI 开发工具的内容.这是第一天的 Connect(); 2017 的主题演讲. 在开场视频中霍金又来了.你记 ...

  8. KICKSTART无人值守安装 - (字符界面操作)

    kickstart 部署 1.1 kickstart简介说明 1.1.1 pxe工作过程(图) 1.1.2 kickstart具体过程(图) 1.2 kickstart无人值守部署 1.2.1 系统环 ...

  9. ASP.NET Core缓存静态资源

    背景 缓存样式表,JavaScript或图像文件等静态资源可以提高您网站的性能.在客户端,总是从缓存中加载一个静态文件,这样可以减少对服务器的请求数量,从而减少获取页面及其资源的时间.在服务器端,由于 ...

  10. Struts2-046验证脚本

    下面分享一下Struts2-046验证的python脚本 #encoding:utf-8 import urllib2 from poster.encode import multipart_enco ...