面试问外观模式???这不就是设计模式里面的吗?我给你上一课吧,面试官

  • 外观模式
    • 介绍
    • 实现
      • 步骤 1
    • Shape.java
      • 步骤 2
    • Rectangle.java
    • Square.java
    • Circle.java
      • 步骤 3
    • ShapeMaker.java
      • 步骤 4
    • FacadePatternDemo.java
      • 步骤 5

外观模式

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。

这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。

介绍

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

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

何时使用 1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。 2、定义系统的入口。

如何解决客户端不与系统耦合,外观类与系统耦合。

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

应用实例 1、去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。 2、JAVA 的三层开发模式。

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

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

使用场景 1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。 3、预防低水平人员带来的风险。

注意事项 在层次化结构中,可以使用外观模式定义系统中每一层的入口。

实现

我们将创建一个 Shape 接口和实现了 Shape 接口的实体类。下一步是定义一个外观类 ShapeMaker

ShapeMaker 类使用实体类来代表用户对这些类的调用。FacadePatternDemo 类使用 ShapeMaker 类来显示结果。

步骤 1

创建一个接口。

Shape.java

public interface Shape {void draw();}

步骤 2

创建实现接口的实体类。

Rectangle.java

public class Rectangle implements Shape {@Overridepublic void draw() {System.out.println("Rectangle::draw()");}}

Square.java

public class Square implements Shape {@Overridepublic void draw() {System.out.println("Square::draw()");}}

Circle.java

public class Circle implements Shape {@Overridepublic void draw() {System.out.println("Circle::draw()");}}

步骤 3

创建一个外观类。

ShapeMaker.java

public class ShapeMaker {private Shape circle;private Shape rectangle;private Shape square;public ShapeMaker() {circle = new Circle();rectangle = new Rectangle();square = new Square();}public void drawCircle(){circle.draw();}public void drawRectangle(){rectangle.draw();}public void drawSquare(){square.draw();}}

步骤 4

使用该外观类画出各种类型的形状。

FacadePatternDemo.java

public class FacadePatternDemo {public static void main(String[] args) {ShapeMaker shapeMaker = new ShapeMaker();shapeMaker.drawCircle();shapeMaker.drawRectangle();shapeMaker.drawSquare();}}

步骤 5

执行程序,输出结果:

Circle::draw()
Rectangle::draw()
Square::draw()

收藏等于白嫖,三连才是真情(滑稽)

面试问外观模式???这不就是设计模式里面的吗?我给你上一课吧,面试官相关推荐

  1. java外观模式实例_Java设计模式(11)----------外观模式

    1.介绍 外观模式是一种结构型设计模式.在外观模式中,外观类中提供一个或者一组对外的接口.客户端对于复杂系统的访问是通过外观类的接口进行的,从而解除了客户端与复杂系统之间的耦合,隐藏了复杂系统内部的逻 ...

  2. 设计模式之外观模式php,PHP设计模式:外观模式

    前言 菜鸟教程对外观模式的描述是:外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口, ...

  3. 设计模式之外观模式php,php设计模式(十五)外观模式

    外观模式又叫门面模式: 现在都是模块化开发了: 开发中很多时候都是在使用各种扩展包: 或者在外观模式中我们叫做子系统: 外观模式的作用就是减少子系统之间的耦合: 降低子系统的使用难度: 我们举个栗子: ...

  4. 设计模式之外观模式php,php设计模式之外观模式

    外观模式 为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用,外观模式又称门面模式 使用外观模式的原因: 1,开发阶段,子系统越来越复杂,增加外观模式提供一个 ...

  5. [经验分享] 覃超线上直播课-模拟面试

    本文为2020年07月09日 本文为覃超关于模拟面试的线上直播课的听课笔记. 正确对待面试 作为和未来同事的一次合作 并肩作战,解决问题 减少压力(一定要积极的沟通和表达) 所以一定要积极的沟通和表达 ...

  6. 【设计模式】外观模式 ( 概念 | 适用场景 | 优缺点 | 代码示例 )

    文章目录 I . 外观模式概念 II . 外观模式 适用场景 III . 外观模式 优缺点 IV . 外观模式与其它设计模式的联系与区别 V . 外观模式 代码示例 I . 外观模式概念 1 . 外观 ...

  7. [学习笔记]设计模式[6]-{适配器模式外观模式}

    设计原则 最少知识原则:只和你的密友谈话 这个原则的意思是,在系统设计的过程中,不要让太多的类耦合在一起,免得对系统一部分的修改会影响到其他部分.在设计系统之前,应该首先注意对象与对象之间的交互关系, ...

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

    一.前言 分析完适配器模式后,接着看外观模式,外观模式很简单,可以理解为在复杂系统上封装了一层,提供了统一的接口,而让客户端只需要与该接口通信便可控制背后复杂的系统. 二.外观模式定义 定义:提供了统 ...

  9. 面试问了这两个问题,很多人的回答都自相矛盾

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | hsm_computer @ https://urlif ...

最新文章

  1. 计算机窗口还原,win8系统找回计算机窗口“回收站”的还原办法
  2. BZOJ 1194: [HNOI2006]潘多拉的盒子 [DP DFA]
  3. excel批量更改超链接_Excel如何批量建立超链接,搭建工作台
  4. 每天一道LeetCode-----某个数在递增序列第一次和最后一次出现的位置
  5. 微服务技术方案:Spring Cloud 从入门到实战
  6. img设置宽高不生效_便宜 好用 不掉盘 保姆级粒子云刷机攻略
  7. python数据检索_python – Hachoir – 从组中检索数据
  8. Oracle之pl/sql编程(一)函数,过程,包
  9. python软件下载-python下载_python免费下载[编程工具]-下载之家
  10. 【图像加密】基于matlab GUI彩色图像加密解密(带面板)【含Matlab源码 1231期】
  11. calibre版本问题造成无法转换pdf
  12. 房屋托管平台“朴邻”签约法大大,电子合同提升客户签约体验
  13. php正则表达式在线测试工具,在线测试正则表达式工具:适合asp.net vb.net cs.net等Web或者Windows程序,便于你快速编写正确正则表达式,提供正则表达式模板供参考。...
  14. leetcode 1859 又是一道字符串分隔的题目
  15. Java 仿 Excel 公式计算
  16. RK3188 5.1平台PCM2708 USB声卡调试
  17. 全面屏手机时代,指纹识别究竟该何去何从?
  18. 又一巨头从Java迁移到Kotlin:关键应用全部开始切换、安卓代码库超过千万行Kotlin代码
  19. docker和docker-compose部署
  20. React native 照片压缩上传

热门文章

  1. EF Core 2.0使用MsSql/Mysql实现DB First和Code First
  2. Unity引擎及编辑器C#源代码发布
  3. ASP.NET Core MVC 控制器创建与依赖注入
  4. 开源Asp.Net Core小型社区系统
  5. .NET 和 Mono 的一点历史
  6. .NET平台开源项目速览-最快的对象映射组件Tiny Mapper之项目实践
  7. C# 对程序窗口进程和进程ID
  8. Mysql-索引的基础和类型
  9. 两种方法清除Excel保护密码
  10. ASP.NET MVC入门(一)---MVC的Hello World