设计模式(二)

外观模式(Facade)

为了解决子系统外部的客户端在使用子系统的时候,既能简单地使用这些子系统内部的模块功能,而又不用客户端去与子系统内部的多个模块交互的问题。

为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

外观模式就是通过引入一个外观类,在这个类里面定义客户端想要的简单的方法,然后在这些方法的实现里面,由外观类再去分别调用内部的多个模块来实现功能,从而让客户端变得简单。这样一来,客户端就只需要和外观类交互就可以了。

package Facade;

public classConfigModel {

private boolean needGenPresentation = true;

private boolean needGenBusiness = true;

private boolean needGenDAO = true;

public boolean isNeedGenPresentation(){

return needGenPresentation;

}

public boolean isNeedGenBusiness(){

return needGenBusiness;

}

public boolean isNeedGenDAO(){

return needGenDAO;

}

public void setNeedGenPresentation(boolean needGenPresentation){

this.needGenPresentation=needGenPresentation;

}

public void setNeedGenBusiness(boolean needGenBusiness){

this.needGenBusiness=needGenBusiness;

}

public void setNeedGenDAO(boolean needGenDAO){

this.needGenDAO=needGenDAO;

}

}

package Facade;

public classConfigManager {

private static ConfigManager manager = null;

private static ConfigModel cm = null;

private ConfigManager(){

//

}

public static ConfigManager getInstance(){

if(manager==null){

manager = new ConfigManager();

cm new ConfigModel();

}

return manager;

}

public ConfigModel getConfigDate(){

return cm;

}

}

package Facade;

public classPresentation {

public void generate(){

ConfigModel cm = ConfigManager.getInstance().getConfigDate();

if(cm.isNeedGenPresentation()){

System.out.println("Generate Presentation Layer");

}

}

}

package Facade;

public classBusiness {

public void generate(){

ConfigModel cm = ConfigManager.getInstance().getConfigDate();

if(cm.isNeedGenBusiness()){

System.out.println("Generate Business Layer");

}

}

}

package Facade;

public classDAO {

public void generate(){

ConfigModel cm = ConfigManager.getInstance().getConfigDate();

if(cm.isNeedGenDAO()){

System.out.println("Generate DAO Layer");

}

}

}

package Facade;

public classFacade {

publicvoidgenerate(){

new Presentation().generate();

new Business().generate();

new DAO().generate();

}

}

package Facade;

public classClient {

publicstaticvoidmain(String[] args){

new Facade().generate();

}

}

Output:

Generate Presentation Layer

Generate Business Layer

Generate DAO Layer

设计模式(二)-- 外观模式(Facade)的更多相关文章

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

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

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

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

  3. 二十四种设计模式:外观模式(Facade Pattern)

    外观模式(Facade Pattern) 介绍为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.示例有一个Message实体类,某对象对它 ...

  4. 研磨设计模式解析及python代码实现——(二)外观模式(Facade)

    一.外观模式定义 为子系统中的一组接口提供一个一致的界面,使得此子系统更加容易使用. 二.书中python代码实现 class AModuleApi: def testA(self): pass cl ...

  5. 设计模式之外观模式(Facade)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  6. [设计模式] 10 外观模式 facade

    外观模式应该是用的很多的一种模式,特别是当一个系统很复杂时,系统提供给客户的是一个简单的对外接口,而把里面复杂的结构都封装了起来.客户只需使用这些简单接口就能使用这个系统,而不需要关注内部复杂的结构. ...

  7. 设计模式 笔记 外观模式 Facade

    //---------------------------15/04/16---------------------------- //Facade 外观模式-----对象结构型模式 /* 1:意图: ...

  8. 【设计模式】—— 外观模式Facade

    前言:[模式总览]——————————by xingoo 模式意图 外观模式主要是为了为一组接口提供一个一致的界面.从而使得复杂的子系统与用户端分离解耦. 有点类似家庭常用的一键开关,只要按一个键,台 ...

  9. 结构型设计模式之外观模式(Facade)

    结构 意图 为子系统中的一组接口提供一个一致的界面,F a c a d e 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 适用性 当你要为一个复杂子系统提供一个简单接口时.子系统往往因 ...

  10. python : 设计模式之外观模式(Facade Pattern)

    #为啥要用外观模式举例说明 这个例子很形象,直接从人家博客上贴过来的,参考链接在下面 不知道大家有没有比较过自己泡茶和去茶馆喝茶的区别,如果是自己泡茶需要自行准备茶叶.茶具和开水,如图1(A)所示,而 ...

随机推荐

  1. Java判断当前用户数及当前登录用户数工具类-session原理

    JavaWeb开发中,有时会遇到统计或管理用户登录数或者当前在线多少用户,分别都是谁的情况.当然,实现途径多种多样.下面列举一下通过session实现的一种统计. public class MySes ...

  2. server正式的环境性能测试nginx-php 指着寻求突破的表现

    因为我是第三级城市语言.无法接触到更牛接触逼公司或环境.这是你母亲的现场环境摸过几次.截至完毕,测试已设法提高空间. 公司须要的站点执行环境.不能由于我这边的瓶颈而阻碍了公司进行,希望各位大能能不吝惜 ...

  3. ASP.Net MVC请求处理流程

    ASP.Net MVC请求处理流程 好听的歌 我一直觉得看一篇文章再听一首好听的歌,真是种享受.于是,我在这里嵌入一首好听的歌,当然你觉得不想听的话可以点击停止,歌曲 from 王菲 <梦中人& ...

  4. HTML5它contenteditable属性

    HTML5它contenteditable属性 1.功能说明 (1)功能:同意用户编辑元素中的内容 (2)说明:是一个布尔值.false是不能编辑,true为可编辑 2.分析实例 (1)content ...

  5. Swift 制作一个新闻通知中心插件1

    使用 Swift 制作一个新闻通知中心插件(1) 随着 iOS 8 的发布,苹果为开发者们开放了很多新的 API,而在这些开放的接口中 通知中心插件 无疑是最显眼的一个.通知中心就不用过多介绍了,相信 ...

  6. 2.4 LINQ中使用where子句指定筛选条件

    本篇讲解的内容有: 使用where筛选过滤LINQ查询 带逻辑的where筛选 多个where筛选子句 [1.使用where筛选过滤LINQ查询] 通常一个LINQ查询不会如前面的示例代码这么简单,经 ...

  7. 在ubuntu下使用eclipse来调试ARM程序

    该程序为外部Makefile project,导入到eclipse中来进行编译,之后使用Jlink来进行调试. 这个是因为你在编译的时候没有加-g这个标志,导致没有生成调试文件. 让你指定一个源文件. ...

  8. 5款新颖的ReSharper插件

    ReSharper是著名的代码生成工具.自ReSharper 8.0版本发布以来,新的扩展管理器.模板设置.分发安装等功能改革使得对插件的要求变高.接下来小编整理了5款新颖插件. JetBox 当开发 ...

  9. 用HTML和javascript(JS)计算触屏手机手指滑动方向的演示

    移动终端的流行,程序员希望通过HTML+JS完成触屏动作的识别.下面给出具体实现的例子,供大家参考. 将下面的代码复制并保存,用手机访问,现在的手机浏览器一般都支持触屏,针对本演示来讲就是支持三个js ...

  10. DDD领域驱动设计

    DDD领域驱动设计实践篇之如何提取模型 需求说明: 省级用户可以登记国家指标 省级用户和市级用户可以登记指标分解 登记国家指标时,需要录入以下数据:指标批次.文号.面积,这里省略其他数据,下同 登记指 ...