Android设计模式(九)--外观模式
问题:在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设计模式(九)--外观模式的更多相关文章
- 设计模式之 外观模式详解(Service第三者插足,让action与dao分手)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 各位好,LZ今天给各位分享一 ...
- 每天一个设计模式-2 外观模式(Facade)
每天一个设计模式-2 外观模式(Facade) 1.生活中的示例 客户想要购买一台电脑,一般有两种方法: 1.自己DIY,客户需要知道组成电脑的所有电子器件,并且需要熟悉那些配件,对客户要求较高. ...
- C#设计模式(11)——外观模式(Facade Pattern)
一.引言 在软件开发过程中,客户端程序经常会与复杂系统的内部子系统进行耦合,从而导致客户端程序随着子系统的变化而变化,然而为了将复杂系统的内部子系统与客户端之间的依赖解耦,从而就有了外观模式,也称作 ...
- 乐在其中设计模式(C#) - 外观模式(Facade Pattern)
原文:乐在其中设计模式(C#) - 外观模式(Facade Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 外观模式(Facade Pattern) 作者:webabcd 介绍 ...
- Android 设计模式之MVC模式
说到Android设计模式的MVC模式,估计很多人都是比较熟悉了,这里深入了解一下MVC到底是怎么回事,以ListView为例子讲解. 一.深入理解MVC概念 MVC即Model-View-Contr ...
- 8.4 GOF设计模式三: 外观模式 Facade
GOF设计模式三: 外观模式 Facade “现有系统”功能强大.复杂,开发“新系统”需要用到其中一部分,但又要增加一部 分新功能,该怎么办?4.1 Facade Pattern: Key Fea ...
- 北风设计模式课程---外观模式(Facade)总结
北风设计模式课程---外观模式(Facade)总结 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 设计模式都是对生活的抽象,比如用户获得装备,我可以先装备 ...
- js设计模式——2.外观模式
js设计模式——2.外观模式
- python设计模式之外观模式
python设计模式之外观模式 系统会随着演化变得非常复杂,最终形成大量的(并且有时是令人迷惑的)类和交互,这种情况并不少见.许多情况下,我们并不想把这种复杂性暴露给客户端.外观设计模式有助于隐藏系统 ...
- Java设计模式菜鸟系列(九)外观模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39805735 外观模式(Facade):是为了解决类与类之间的依赖关系的,像spring一 ...
随机推荐
- 介绍一款好用 mongodb 可视化工具
最近想自己搭建一个个人博客,所以学了下mongodb,mongodb是用命令行输入的,有些人可能不太习惯,我自己找了下mongodb的一些可视化工具,一开始安装的是mongoVUE,mongoVUE页 ...
- python小小面试题
一.python是如何进行内存管理的?Python引入了一个机制:引用计数.python内部使用引用计数,来保持追踪内存中的对象,Python内部记录了对象有多少个引用,即引用计数,当对象被创建时就创 ...
- Python 解LeetCode:Intersection of Two Arrays
最近,在用解决LeetCode问题的时候,做了349: Intersection of Two Arrays这个问题,就是求两个列表的交集.我这种弱鸡,第一种想法是把问题解决,而不是分析复杂度,于是写 ...
- 五:Token问题和使用详解
什么是Token? Token可以理解为令牌,服务端通过验证Token,来判断你是否有这个操作的权限.Token的重要特性是有效性,一般Token只在一定时间范围内有效.下图是登录模块的一个流程图,展 ...
- 字符函数 php
strrchr( '123456789.xls' , '.' ); //程序从后面开始查找 '.' 的位置,并返回从 '.' 开始到字符串结尾的所有字符
- JS--我发现,原来你是这样的JS:面向对象编程OOP[3]--(JS继承)
一.面向对象编程(继承) 这篇博客是面向对象编程的第三篇,JS继承.继承顾名思义,就是获取父辈的各种"财产"(属性和方法). 怎么实现继承? 我们的JavaScript比较特别了, ...
- 很考验人的java内存加载面试题
源代码如下,求结果 public class MemoryAnalyse { public static int k = 0; public static MemoryAnalyse t1 = new ...
- Python之元类
类型对象负责创建对象实例,控制对象行为.那么类型对象又由谁来创建呢? 元类(metaclass)——类型的类型 New-Style Class的默认类型是type >>> class ...
- iBatis.net技术实践
随着大数据技术的兴起和快速发展,人们更多的开始关注HDFS.HBase.Hive等技术.但是谈到强一致性,我们又不得不回归现实,只能继续沿用RDBMS存储强一致性的数据.我们日常接触到的绝大多数的应用 ...
- 利用bootstrap写的一点本地(localStorage)储存
摘要: H5本地存储 在以前,我们想要存储一些数据,并且只是在前端使用,服务端并不会使用,我们只能存在cookie里,但是cookie会跟随请求头在客户端和服务端之间来回传递,而且cookie还有一些 ...