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

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

  • 外观模式
    • 介绍
    • 实现
      • 步骤 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()

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ab st语言编程手册_西门子PLC编程SCL和LAD谁才是王者?一起讨论一下

现在很多大品牌的中高级 PLC 都支持国际电工委员会 IEC61131 标准中规范的五种编程语言的混合编程,即梯形图(LD)、结构化文本(ST)、流程图(SFC)、指令表(IL)和功能块(FB)。在这五种编程语言中&a…

ASP.NET Core自定义响应内容

问题在业务开发中,对Web API的返回格式有一定要求,需要是定制化的Json结构,用于前端统一处理:{Status : 0,Message: "",Info : xxx }Status表示响应的状态码,0为成功;Message表示错误消息&#x…

这个被称为20世纪最伟大人物的最强理科生,到底有多强,你根本不了解

▲ 点击查看从素有“计算机界诺贝奖”之称的图灵奖,距离现在已经走过了半个多世纪。在这50多年间,诞生了几十位顶尖的计算机科学家以及几十项科技成就。从智能设备到5G,从无人车到AI,在计算机的进化版图中,计算机从一个…

倾情研发十年记

写在亚洲研究院成立十周年、亚洲工程院成立五周年之际今天是微软亚洲研究院成立十周年的日子,微软亚洲工程院也刚刚度过它的五周岁生日。在这个特殊的时刻,回望这些年来全心投入研发的日子,我心中充满了自豪和对未来的期待。十年前&#xff0…

华为二面!!!被问常用API,这也太偏门了吧,我秀了一波hhhh~

华为二面!!!被问常用API,这也太偏门了吧,我秀了一波hhhh~常用API一、API概述二、Scanner类代码三、Random类代码四、* ArrayList类**存储基本数据类型**代码五、匿名对象昨天我去了华为面试,问我常用API,我以为我被搞到…

空值为0非空为1_万达广场4周年,1降到底!0元送万张杂技团门票、人气餐饮6.8折,这波周年庆我先锁为敬...

作为向来宠你没商量的国民商场4周年店庆,福利当然少不了!黄金克减zui高100元餐饮全单6.8折,更享折上zhe更有街舞争霸赛、王者荣耀争霸赛等精彩活动等你打卡,?就问你来不来?精品超市,实力宠粉没有套路&…

清北学霸的书单居然那么有讲究?看看你比学霸少看了哪些书......

一直以来,少年物理学家为大家分享了许多物理知识、科学家的小故事,以及生活中的趣味科学,得到了许多粉丝们的支持!为了表达对大家的感谢,在新春之际,我们决定发起“最美学习萌娃”评选活动,借助…

平流式初沉池贮砂斗计算_城市污水处理厂产泥量的计算

污泥是污水处理过程的副产物,包括筛余物、沉泥、浮渣和剩余污泥等。污泥体积约占处理水量的0.3%~0.5%左右,如水进行深度处理,污泥量还可能增加0.5~1倍。一、污水处理污泥分类及特性1、按成分不同分污泥:以有机物为主要成分。其主要…

从N个元素中选择第i小的元素

时常在笔试,面试题中看到这个问题,《算法导论》中给出了很好的解答。 Selection of the ith smallest element of the array A can be done in θ(n) times. The psuedocode is following: CodeRandomized_Select(A,p,r,i){ if pr then return A[p] qRandomized_…

Blazor 模板化组件开发指南

翻译自 Waqas Anwar 2021年4月15日的文章 《A Developer’s Guide To Blazor Templated Components》 [1]在我之前的一篇文章 Blazor 组件入门指南中,我介绍了组件参数,并向您展示了如何将数据作为参数传递给 Blazor 组件以定制化其功能。在这篇文章中&a…

别太贪婪,这些技能能让你一辈子满足

全世界只有3.14 % 的人关注了青少年数学之旅在这个资讯丰富且易获取的时代,越来越多的人不愿意花时间阅读书籍,碎片化阅读成了主流。人们获取的东西多而杂,很难系统、全面。海量信息对人是冲击,更是诱惑。谁不想了解天下奇闻&…

纳尼???我JVM优化过头了,直接把异常信息优化没了?怎么办

你好呀,我是why。 你猜这次我又要写个啥没有卵用的知识点呢? 不好意思,问的稍微有点早了,啥提示都没给,咋猜呢,对吧? 先给你上个代码: public class ExceptionTest {public stati…

C# 读写ACCESS的OLE对象,演示图片与长文件的读写

网络上的读写OLE对象的代码是多,不过多是转载的,大部分人从来都没实际测试过,只是COPY来COPY去。我重来没看到一个真正可以运行的东东。没办法,只有自力更生,花了一点时间出了点研究成果,写到这里做个记录。…

WPF等待动画

WPF开发者QQ群: 340500857 | 微信群 -> 进入公众号主页 加入组织欢迎转发、分享、点赞、在看,谢谢~。 01—效果预览效果预览(更多效果请下载源码体验):02—代码如下一、CycleLoading.cs 代码如下using System.Win…

假期别在家里要发霉了?可以靠他们度过无聊时光

全世界只有3.14 % 的人关注了青少年数学之旅在这个资讯丰富且易获取的时代,越来越多的人不愿意花时间阅读书籍,碎片化阅读成了主流。人们获取的东西多而杂,很难系统、全面。海量信息对人是冲击,更是诱惑。谁不想了解天下奇闻&…

cs6序列号 mac版photoshop_重磅!Parallels Desktop 16 M1版发布

Parallels 现已发布 Parallels Desktop 16 技术预览版,可以在搭载 M1 芯片的 Mac 电脑上运行。该公司表示,它创建了一个 “使用 Apple M1 Mac 芯片硬件辅助虚拟化的新虚拟化引擎”,允许用户在虚拟机中运行基于 Arm 的操作系统,例如…

华为二面!!!面试官直接问我Java中到底什么是NIO?这不是直接送分题???

华为二面!!!面试官直接问我Java中到底什么是NIO?这不是直接送分题???什么是NIO缓冲区(Buffer)缓冲区类型获取缓冲区核心属性核心方法非直接缓冲区和直接缓冲区非直接缓冲区直接缓冲区通道(Chann…

Delphi中的容器类(3)

TBucketList和TObjectBucketList类 从Delphi6开始,VCL的Contnrs单元中又增加了两个新的容器类TBucketList和TObjectBucketList。TBucketList实际上也是一个简单基于哈希表的指针-指针对列表。接口定义如下: TBucketList class(TCustomBucketList)… pu…

一文读懂哈希和一致性哈希算法

哈希 Hash 算法介绍哈希算法也叫散列算法, 不过英文单词都是 Hash, 简单一句话概括, 就是可以把任意长度的输入信息通过算法变换成固定长度的输出信息, 输出信息也就是哈希值, 通常哈希值的格式是16进制或者是10进制, 比如下面的使用 md5 哈希算法的示例md5("123456"…

延迟开学?这些教育读书公众号可以帮助孩子学习! 你都关注了吗?

全世界只有3.14 % 的人关注了青少年数学之旅受新型冠状病毒疫情影响,日前,教育部印发《关于2020年春季学期延期开学的通知》。推迟开学时间,意味着寒假的延长。为此,小编精选这些优质的教育号和读书号帮助孩子学习!理想…