大纲:

  1. 概述
  2. 实现

一、概述

简介:外观模式是一种结构性模式,他为客户端提供了一个简便的访问接口即外观。客户只要和这个外观打交道,屏蔽了系统内部的复杂性。

角色:外观模式由2个角色,1是外观、2是子系统。

使用:客户想执行多个子系统的操作,为了简化客户的操作,我们提供一个外观,这个外观只有一个入口,客户只根据需求配置自己调用哪些子系统即可。

二、实现

2.1配置管理

//配置
public class ConfigModel {
private boolean isNeedPresentation;
private boolean isNeedDao;
private boolean isNeedBuss;
}
//配置管理
public class ConfigManager {
private static ConfigManager configManager = null;
private static ConfigModel configModel = null;
public static ConfigManager getConfigManager(){
if(configManager==null){
configManager = new ConfigManager();
configModel = new ConfigModel(); //这里可以根据客户端提供的配置文件进行控制
configModel.setNeedBuss(true);
configModel.setNeedDao(true);
configModel.setNeedPresentation(true);
}
return configManager;
}
public static ConfigModel getConfigModel(){
return configModel;
}
}

2.2子系统内部模块(核心模块):

public class Dao {
public void generate(){
ConfigModel model = ConfigManager.getConfigManager().getConfigModel();//子模块根据配置文件选择执行与否。
if(model.isNeedDao()){
System.out.println("generate Dao");
}
}
} public class Bussiness {
public void generate(){
ConfigModel model = ConfigManager.getConfigManager().getConfigModel();
if(model.isNeedBuss()){
System.out.println("generate Bussiness");
}
}
} public class Presentation {
public void generate(){
ConfigModel model = ConfigManager.getConfigManager().getConfigModel();
if(model.isNeedPresentation()){
System.out.println("generate presentation");
}
}
}

2.3外观(核心模块):外观就是客户端看系统,仅仅能看到系统提供给客户端的接口,外观隐藏了所有细节

public class Facade {
public static void generate(){
new Dao().generate();
new Presentation().generate();
new Bussiness().generate();
}
}

2.4客户端

public class Client {
public static void main(String[] args) {
Facade.generate();
}
}

研磨设计模式学习笔记2--外观模式Facade的更多相关文章

  1. 设计模式学习系列9 外观模式Facade

    1.概述 自己卖了一辆越野自行车,但毕竟不是自己定制的,买回来之后可能需要更改一下脚蹬,座皮,里程计数器或者刹车系统,假如将自行车看做一个整体系统,对我们而言使用的是自行车,然后我们对自己车构件的修改 ...

  2. 研磨设计模式学习笔记4--单例模式Signleton

    需求:加载配置文件,由于配置文件全局唯一,所以不用过多对象,建一个就可以了. 优点:单例模式本质就是为了控制实例数目. 一.饿汉式 public class Singleton { private S ...

  3. 研磨设计模式学习笔记3--适配器模式Adapter

    需求:制作一个日志管理系统,分为2个版本,第一版制作一个将日志存在本地文件的管理系统,第二版制作一个存储在数据库的管理系统,同时,第二版兼容第一版. 优点:可以复用现有功能,无需重新开发. 一.第一版 ...

  4. 设计模式(九)外观模式Facade(结构型)

    设计模式(九)外观模式Facade(结构型) 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. ...

  5. 设计模式(二)-- 外观模式(Facade)

    设计模式(二) 外观模式(Facade) 为了解决子系统外部的客户端在使用子系统的时候,既能简单地使用这些子系统内部的模块功能,而又不用客户端去与子系统内部的多个模块交互的问题. 为子系统中的一组接口 ...

  6. 【转】设计模式(九)外观模式Facade(结构型)

    设计模式--外观模式Facade(结构型): 1. 概述 外观模式,我们通过外观的包装,使应用程序只能看到外观对象,而不会看到具体的细节对象,这样无疑会降低应用程序的复杂度,并且提高了程序的可维护性. ...

  7. 设计模式学习笔记--备忘录(Mamento)模式

    写在模式学习之前 什么是设计模式:在我们进行程序设计时,逐渐形成了一些典型问题和问题的解决方式,这就是软件模式:每个模式描写叙述了一个在我们程序设计中常常发生的问题,以及该问题的解决方式:当我们碰到模 ...

  8. (转载)设计模式学习笔记(十一)——Facade外观模式

    (转载)http://www.cnblogs.com/kid-li/archive/2006/07/10/446904.html Facade外观模式,是一种结构型模式,它主要解决的问题是:组件的客户 ...

  9. 《Head First 设计模式》学习笔记——适配器模式 + 外观模式

    在ADO.NET中.对于我们从数据库中取出的数据都要放到一个DataSet中,无论你是Access的数据库,还是SQL的数据库,或者是Oracle的数据库都要放到DataSet中..NET中并没有提供 ...

随机推荐

  1. aspose ppt转图片

    如果直接转图片,会很模糊采用先将ppt转pdf,在通过pdf转图片,这样出来的结果就非常清晰 var pptFileName = "公司网络及计算机使用与要求.pptx"; Pre ...

  2. li ol ul是什么的简写?

    为了方便理解知识,我通常会对一些英语简写追根溯源,在火狐开发者社区里面找到了一些资料. li是 list item的简写不是list的简写 ol是ordered list的简写 ul是unordere ...

  3. 两个进程之间的通讯——pipe 管道

    在实际工作中,已经编辑好了NIPT_analysis的软件,该软件一般的输入文件是sam文件,但是为了集成进入测序仪器,需要直接从比对软件的标准输出中读取sam文件,省去了比对软件和NIPT_anal ...

  4. jQuery 插件开发——PopupLayer(弹出层)

    导读:上次写了一篇关于GridView的插件开发方法,上几天由于工作需要,花了一天左右的事件封装了popupLayer(弹出层)插件.今天有时间就记录一下自己的开发思想与大家分享下,同时也算是对这段时 ...

  5. python 全局搜索路径

    在~/.bachrc中添加 export PYTHONPATH=$PATHONPATH:[需要添加的路径]

  6. Spring.Net 未将对象引用设置到对象的实例

    “/”应用程序中的服务器错误. 未将对象引用设置到对象的实例. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详 ...

  7. P与NP问题详解

    P,NP,NPC问题,这或许是众多OIer最大的误区之一. 本文就为大家详细讲解如上三个问题. 前序: 你会经常看到网上出现“这怎么做,这不是NP问题吗”.“这个只有搜了,这已经被证明是NP问题了”之 ...

  8. laravel5.2总结--返回值

    基本概念和概述 1>StdClass 对象=>基础的对象 2>Eloquent 模型对象(Model 对象)=>和模型相关的类对象 3>Eloquent 集合=>可 ...

  9. docker与虚拟机性能比较(转)

    http://blog.csdn.net/cbl709/article/details/43955687 本博客来源于我的个人博客: www.chenbiaolong.com 欢迎访问. 概要 doc ...

  10. springboot添加第三方的jar或本地jar

    原文链接:https://www.cnblogs.com/fengli9998/p/8044923.html 由对接支付引入第三方的jar时冒出的问题,如何在springboot项目中来引入第三方的j ...