1.定义:

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口

2.生活实例:

医院看病,首先病人必须先挂号,然后门诊。如果医生要求化验,病人必须首先划价,然后缴费,才可以到化验部门做化验。化验后再回到门诊室。解决这种不便的方法便是引进门面模式,医院可以设置一个接待员的位置,由接待员负责代为挂号、划价、缴费、取药等。这个接待员就是门面模式的体现,病人只接触接待员,由接待员与各个部门打交道。

3.意图:

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

4.主要解决:

降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。

5.关键代码:

在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。

6.优点:

1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。

7.缺点:

不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

8.使用场景:

a、为复杂的模块或子系统提供外界访问的模块。 b、子系统相对独立。 c、预防低水平人员带来的风险。

9.java代码:

子系统类:

public interface Shape {void draw();
}
public class Rectangle implements Shape {public void draw() {System.out.println("draw rectangle");}
}
public class Circle implements Shape {public void draw() {System.out.println("draw cricle");}
}
public class Square implements Shape {public void draw() {System.out.println("draw square");}
}

门面角色类:

public class ShapeFacade {private Shape rectangleShape=new Rectangle();private Shape squareShape=new Square();private Shape circleShape=new Circle();public ShapeFacade() {}public void draw(){rectangleShape.draw();squareShape.draw();circleShape.draw();}
}

客户端类:

public class Client {public static void main(String[] args) {ShapeFacade facade=new ShapeFacade();facade.draw();}
}

结果:

draw rectangle
draw square

draw cricle

门面类写法二:

public class ShapeFacade2 {private Shape rectangleShape=new Rectangle();private Shape squareShape=new Square();private Shape circleShape=new Circle();public ShapeFacade2() {}public void drawCircle(){circleShape.draw();}public void drawRectangle(){rectangleShape.draw();}public void drawSquare(){squareShape.draw();}
}

客户端:

public class Client2 {public static void main(String[] args) {ShapeFacade2 facade=new ShapeFacade2();facade.drawCircle();facade.drawRectangle();facade.drawSquare();}
}

(设计模式九)java设计模式之外观模式(门面模式)相关推荐

  1. 外观模式 门面模式 Facade 结构型 设计模式(十三)

    外观模式(FACADE) 又称为门面模式 意图 为子系统中的一组接口提供一个一致的界面 Facade模式定义了一个高层接口,这一接口使得这一子系统更加易于使用. 意图解析 随着项目的持续发展,系统基本 ...

  2. 设计模式-外观模式(门面模式)

    外观模式(门面模式) 外观模式介绍 定义 通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式. 该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体细节,这样会大大 ...

  3. 【设计模式】Java设计模式 - 享元模式

    [设计模式]Java设计模式 - 享元模式

  4. 【设计模式】Java设计模式 - 模板模式

    [设计模式]Java设计模式 - 模板模式

  5. 【设计模式】Java设计模式 - 适配器模式

    [设计模式]Java设计模式 - 适配器模式

  6. 混合模式(工厂方法模式+策略模式+门面模式)

    混合模式(工厂方法模式+策略模式+门面模式) 使用这三种模式设计一个简单的计算器程序:计算器是用于计算数值之间进行数学计算后所获得的值.它包含基本的"加减"功能.以上对以上需求进行 ...

  7. facade外观模式/门面模式(通过积分商城的例子理解外观模式)-设计模式

    目录 1.概述与图解 2.积分商城兑换礼品的例子 1.概述与图解 facade,外观模式,又叫门面模式.要解决的问题情境是,当一个客户端,需要调用多个子系统或者多个逻辑处理类,进而才能完成一个目标或功 ...

  8. 【设计模式】Java设计模式 - 中介者模式

    Java设计模式 - 中介者模式

  9. 【Java设计模式】Java设计模式之(十九)装饰器模式(Decorator Pattern)

    本文目录 一.装饰器模式介绍 1.1 含义 1.2 适用场景 1.3 主要解决 1.4 应用实例 1.5 优缺点

  10. 【Java设计模式】Java设计模式之(十五)策略模式(Strategy Pattern)

    本文目录 一.策略模式介绍 1.1 含义 1.2 适用场景 1.3 主要解决 1.4 应用实例 1.5 优缺点 二.策略模式实现 2.1 类图 2.2 代码实现 第一个案例:策略模式代码实现 第二个案 ...

最新文章

  1. 《转》每天起床时,优秀创业者都会问自己这3个问题
  2. 讯飞输入法皮肤制作_手机输入法哪家强:百度、搜狗、讯飞输入法对比评测
  3. Django用法(一)
  4. 灯光工厂滤镜插件knoll light factory
  5. CTFshow 信息收集 web2
  6. Vertical Menu ver4
  7. linux安装meld rpm,Linux meld安装
  8. 安卓rpg绅士游戏资源_海贼无双3(动作游戏)——电脑安卓单机游戏下载资源分享...
  9. python-socket客户服务端的传输原理异常关闭的情况
  10. element vue 动态单选_SpringBoot+Vue(MyBatis + Shiro + Jwt + Druid + Redis + ElementUI )快速开发框架...
  11. 基于mini2440的两种触屏中断程序(T35)
  12. .net2.0中对config文件的操作方法总结
  13. 单点登录原理及实现方式
  14. scala怎么取绝对值
  15. LM2596DC -DC模块测试记录
  16. 如何确认RNA的质量?附RNA提取实验方法技巧分析
  17. 小常识:手机被偷后如何让小偷不能用
  18. m语言 东华his_M语言
  19. 制作Win10系统安装U盘,安装纯净版Win10的通用教程
  20. java 中long型数据的对比

热门文章

  1. 2019春晚由谁主持?技术上有何创新?为你提前揭秘
  2. 华为/安卓设备安装GMS
  3. 如何提升DT场景下的AEC效果
  4. ANTV X6 Model
  5. js 使用console计算代码运行时间
  6. Ubuntu主题美化--使用WPS风格
  7. 米拓建站系统1day审计与利用
  8. 怎么编辑发布百度词条
  9. centos7桌面能看到计算机,【14-10-29】 【总结】教你怎么将centos7打造成桌面系统。。。...
  10. Advanced Customization of the jQuery Mobile Buttons | Appcropolis