问题:在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. asp.net core 开发的https证书服务-agilelabs.net

    创建证书-生成CSR(Certificate Sign Request): 填写证书基本信息 接下来我们就可以看到创建的证书签名请求信息(CSR): 为我们刚才创建的CSR签名: 签名的意思是说通过证 ...

  2. 简单聊聊java中如何判定一个对象可回收

    背景 说到java的特性,其中一个最重要的特性便是java通过new在堆中分配给对象的内存,不需要程序员主动去释放,而是由java虚拟机自动的回收.这也是java和C++的主要区别之一:那么虚拟机是如 ...

  3. struts2+spring3+hibernate3+mysql简单登录实现

    1.导入相关的jar包 2.建立数据库 1 create table account( 2 id int(10), 3 user varchar(50), 4 paw varchar(50) 5 ); ...

  4. Oracle 存储过程的导出导入序列的导出

    昨天发布网站,需要将oracle的存储过程导出来,再在新的电脑加上去.登陆—>工具—>导出用户对象—>选取需要导出的存储过程—>导出 保存格式为.sql.当然利用该种方法也可以 ...

  5. java 内部类和闭包

    内部类(inner class) public class Outer{ private String name; class Inner{ public String getOuterName(){ ...

  6. csv格式的数据存储到mysql

    python写的,有点冗余,先码出来~~~~ 这是data_stored.py的代码 # -*- coding:utf-8 -*- # 存数据到mysql (只存了时间数字) import pymys ...

  7. 通过游戏认识 --- JQuery与原生JS的差异

      前言 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库( 或JavaScript框架).jQuery设计的宗旨是“write ...

  8. iOS推送,看这篇足够了

    一.注册推送: - (void)registerNotification { if ([[[UIDevice currentDevice] systemVersion] floatValue] > ...

  9. bootstrap --> reset css

    /* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 License: none (public domain) */ html, ...

  10. 有没有必要参加IT培训

    近几年,IT培训机构可谓是琳琅满目,稂莠不齐.培训Java的,培训PHP的,培训大数据的等等吧,不一而足. 自己也算是IT技术圈子待了好多年了,面试过一些机构培训出来的学生,也有几个好哥们在培训机构做 ...