设计模式(二)

外观模式(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. CII-原子

    <atom.h> #ifndef ATOM_INCLUDED #define ATOM_INCLUDED extern int Atom_length(const char *str); ...

  2. Android开发:怎样定制界面风格

    统一的用户界面是可以使得应用程序更友好.要做到用户界面的统一,我们就必须用到风格(style)和主题(theme).OPhone系统提供了很多系统默认的风格和主题,但是很多情况下,这些不能满足我们的需 ...

  3. 第1章1节《MonkeyRunner源码剖析》概述:前言(原创)

    天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...

  4. 一个简单的创建dom的函数

    var  regName = /^(div|a|p|ul|li|input|select|document|body|iframe)$/;function createDom(name, obj) { ...

  5. Windows Server 2008安装 百度Wifi \ 360Wifi \ 小米Wifi 失败的解决方法

    服务器管理 -> 功能 -> 安装 [无线LAN]服务

  6. ZOJ 2109 FatMouse&#39; Trade (背包 dp + 贪婪)

    链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1109 FatMouse prepared M pounds of cat ...

  7. web后端server优化

    1,1. 就不需要优化一个页面模板,这些都是一些非常成熟的技术,甚至没有打招呼easy了10%的性能.这10%在整个页面的运行过程中仅仅占了0.5%的比例.微乎其微,等于是前面样例中的4车道变8车道的 ...

  8. C#泛型回顾点滴

    前言 C#的泛型一直是学习者津津乐道的课题了,这确实是一个非常有用的特性,不过在实际使用中,还是有很多需要注意的地方,我们需要通过自己动手实践以及结合理论进行理解,最终总结出自己的编码规范和最佳实践 ...

  9. 生活小助手--Android项目

    每次想做一个Android项目都不知道要怎么开始,所谓前期工作,都是辅助于项目能顺利完成而做的. 每一个项目开始都要有几首准备: 第一,项目要做什么? 第二,项目中有那些版块? 项目的概要设计 项目流 ...

  10. QualityCenter的备份

    1.停止QC Server:2.备份Domain repository,它囊括每个项目的大量数据(包括自动化测试数据.附件.设置和格式表单等).要想知道某个项目所使用的数据库的名字,可以在Site A ...