设计模式(二)-- 外观模式(Facade)
设计模式(二)
外观模式(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)的更多相关文章
- 乐在其中设计模式(C#) - 外观模式(Facade Pattern)
原文:乐在其中设计模式(C#) - 外观模式(Facade Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 外观模式(Facade Pattern) 作者:webabcd 介绍 ...
- 8.4 GOF设计模式三: 外观模式 Facade
GOF设计模式三: 外观模式 Facade “现有系统”功能强大.复杂,开发“新系统”需要用到其中一部分,但又要增加一部 分新功能,该怎么办?4.1 Facade Pattern: Key Fea ...
- 二十四种设计模式:外观模式(Facade Pattern)
外观模式(Facade Pattern) 介绍为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.示例有一个Message实体类,某对象对它 ...
- 研磨设计模式解析及python代码实现——(二)外观模式(Facade)
一.外观模式定义 为子系统中的一组接口提供一个一致的界面,使得此子系统更加容易使用. 二.书中python代码实现 class AModuleApi: def testA(self): pass cl ...
- 设计模式之外观模式(Facade)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- [设计模式] 10 外观模式 facade
外观模式应该是用的很多的一种模式,特别是当一个系统很复杂时,系统提供给客户的是一个简单的对外接口,而把里面复杂的结构都封装了起来.客户只需使用这些简单接口就能使用这个系统,而不需要关注内部复杂的结构. ...
- 设计模式 笔记 外观模式 Facade
//---------------------------15/04/16---------------------------- //Facade 外观模式-----对象结构型模式 /* 1:意图: ...
- 【设计模式】—— 外观模式Facade
前言:[模式总览]——————————by xingoo 模式意图 外观模式主要是为了为一组接口提供一个一致的界面.从而使得复杂的子系统与用户端分离解耦. 有点类似家庭常用的一键开关,只要按一个键,台 ...
- 结构型设计模式之外观模式(Facade)
结构 意图 为子系统中的一组接口提供一个一致的界面,F a c a d e 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 适用性 当你要为一个复杂子系统提供一个简单接口时.子系统往往因 ...
- python : 设计模式之外观模式(Facade Pattern)
#为啥要用外观模式举例说明 这个例子很形象,直接从人家博客上贴过来的,参考链接在下面 不知道大家有没有比较过自己泡茶和去茶馆喝茶的区别,如果是自己泡茶需要自行准备茶叶.茶具和开水,如图1(A)所示,而 ...
随机推荐
- 基于jsoup的Java服务端http(s)代理程序-代理服务器Demo
亲爱的开发者朋友们,知道百度网址翻译么?他们为何能够翻译源网页呢,iframe可是不能跨域操作的哦,那么可以用代理实现.直接上代码: 本Demo基于MVC写的,灰常简单,copy过去,简单改改就可以用 ...
- sp.Net MVC4 + Oracle + EasyUI + Bootstrap2
Asp.Net MVC4 + Oracle + EasyUI + Bootstrap 第二章 Asp.Net MVC4 + Oracle + EasyUI + Bootstrap 第二章 --使用 ...
- DB2建表语句
db2 => create table test (name char(8) not null primary key,depid smallint,pay bigint) DB20000I S ...
- IOC 容器初始化
WebApi 插件式构建方案:IOC 容器初始化 一般来说,一个现代化的网站加载流程是这样的:程序集加载后,我们会初始化 IOC 容器,以便于接下来解析对象用. 我们插件式的开发,这一步更为重要.这是 ...
- 全新通用编程语言 Def 招募核心贡献者、文档作者、布道师 deflang.org
先给出官网地址:deflang.org 一句话简介:可扩展编程语言 Def 的目标是将 C++ 的高效抽象和 Lisp 的强大表现力融为一体. 你可以通过阅读 入门教程 .源码 或 测试用例 来简要或 ...
- python初始化MySQL数据库模板
很基础,但是经常用到,记录一下,省得每次手打 #!/bin/env python # -*- encoding=utf-8 -*- import MySQLdb # Database info hos ...
- 在OpenWrt上编写自己的硬件操作程序
上一篇文章中有写到如何使用OPENWRT的SDK,这里继续,写怎么在上面开发自己的应用程序. 我欲在OpenWrt上编写一个软件,它能够去读取某个AD芯片的多通道采样值. 在看这篇文章之前请看这官方的 ...
- win7 Python 环境 准备 配置
包括Python,eclipse,jdk,pydev,pip,setuptools,beautifulsoup,pyyaml,nltk,mysqldb的下载安装配置. **************** ...
- ASP.NET MVC之单元测试
ASP.NET MVC之单元测试分分钟的事2014-07-15 13:05 by 书洞里的猫, 550 阅读, 4 评论, 收藏, 编辑 一.为什么要进行单元测试? 大部分开发者都有个习惯(包括本人在 ...
- 手机网站keyup解决方案
模糊搜索keyup无效,解决方案如下 //手机网站解决keyup的方法 $(function () { $('#repairsearch').bind('focus', filter_time); } ...