面试问外观模式???这不就是设计模式里面的吗?我给你上一课吧,面试官
面试问外观模式???这不就是设计模式里面的吗?我给你上一课吧,面试官
- 外观模式
- 介绍
- 实现
- 步骤 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()
收藏等于白嫖,三连才是真情(滑稽)
面试问外观模式???这不就是设计模式里面的吗?我给你上一课吧,面试官相关推荐
- java外观模式实例_Java设计模式(11)----------外观模式
1.介绍 外观模式是一种结构型设计模式.在外观模式中,外观类中提供一个或者一组对外的接口.客户端对于复杂系统的访问是通过外观类的接口进行的,从而解除了客户端与复杂系统之间的耦合,隐藏了复杂系统内部的逻 ...
- 设计模式之外观模式php,PHP设计模式:外观模式
前言 菜鸟教程对外观模式的描述是:外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口, ...
- 设计模式之外观模式php,php设计模式(十五)外观模式
外观模式又叫门面模式: 现在都是模块化开发了: 开发中很多时候都是在使用各种扩展包: 或者在外观模式中我们叫做子系统: 外观模式的作用就是减少子系统之间的耦合: 降低子系统的使用难度: 我们举个栗子: ...
- 设计模式之外观模式php,php设计模式之外观模式
外观模式 为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用,外观模式又称门面模式 使用外观模式的原因: 1,开发阶段,子系统越来越复杂,增加外观模式提供一个 ...
- [经验分享] 覃超线上直播课-模拟面试
本文为2020年07月09日 本文为覃超关于模拟面试的线上直播课的听课笔记. 正确对待面试 作为和未来同事的一次合作 并肩作战,解决问题 减少压力(一定要积极的沟通和表达) 所以一定要积极的沟通和表达 ...
- 【设计模式】外观模式 ( 概念 | 适用场景 | 优缺点 | 代码示例 )
文章目录 I . 外观模式概念 II . 外观模式 适用场景 III . 外观模式 优缺点 IV . 外观模式与其它设计模式的联系与区别 V . 外观模式 代码示例 I . 外观模式概念 1 . 外观 ...
- [学习笔记]设计模式[6]-{适配器模式外观模式}
设计原则 最少知识原则:只和你的密友谈话 这个原则的意思是,在系统设计的过程中,不要让太多的类耦合在一起,免得对系统一部分的修改会影响到其他部分.在设计系统之前,应该首先注意对象与对象之间的交互关系, ...
- 【设计模式】外观模式
一.前言 分析完适配器模式后,接着看外观模式,外观模式很简单,可以理解为在复杂系统上封装了一层,提供了统一的接口,而让客户端只需要与该接口通信便可控制背后复杂的系统. 二.外观模式定义 定义:提供了统 ...
- 面试问了这两个问题,很多人的回答都自相矛盾
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | hsm_computer @ https://urlif ...
最新文章
- 计算机窗口还原,win8系统找回计算机窗口“回收站”的还原办法
- BZOJ 1194: [HNOI2006]潘多拉的盒子 [DP DFA]
- excel批量更改超链接_Excel如何批量建立超链接,搭建工作台
- 每天一道LeetCode-----某个数在递增序列第一次和最后一次出现的位置
- 微服务技术方案:Spring Cloud 从入门到实战
- img设置宽高不生效_便宜 好用 不掉盘 保姆级粒子云刷机攻略
- python数据检索_python – Hachoir – 从组中检索数据
- Oracle之pl/sql编程(一)函数,过程,包
- python软件下载-python下载_python免费下载[编程工具]-下载之家
- 【图像加密】基于matlab GUI彩色图像加密解密(带面板)【含Matlab源码 1231期】
- calibre版本问题造成无法转换pdf
- 房屋托管平台“朴邻”签约法大大,电子合同提升客户签约体验
- php正则表达式在线测试工具,在线测试正则表达式工具:适合asp.net vb.net cs.net等Web或者Windows程序,便于你快速编写正确正则表达式,提供正则表达式模板供参考。...
- leetcode 1859 又是一道字符串分隔的题目
- Java 仿 Excel 公式计算
- RK3188 5.1平台PCM2708 USB声卡调试
- 全面屏手机时代,指纹识别究竟该何去何从?
- 又一巨头从Java迁移到Kotlin:关键应用全部开始切换、安卓代码库超过千万行Kotlin代码
- docker和docker-compose部署
- React native 照片压缩上传
热门文章
- EF Core 2.0使用MsSql/Mysql实现DB First和Code First
- Unity引擎及编辑器C#源代码发布
- ASP.NET Core MVC 控制器创建与依赖注入
- 开源Asp.Net Core小型社区系统
- .NET 和 Mono 的一点历史
- .NET平台开源项目速览-最快的对象映射组件Tiny Mapper之项目实践
- C# 对程序窗口进程和进程ID
- Mysql-索引的基础和类型
- 两种方法清除Excel保护密码
- ASP.NET MVC入门(一)---MVC的Hello World