目录

前言

示例


前言

门面模式(也叫外观模式,Facade Pattern)在许多源码中有使用,比如 slf4j 就可以理解为是门面模式的应用。这是一个简单的设计模式,我们直接上代码再说吧。

示例

首先,我们定义一个接口:

public interface Shape {void draw();
}

定义几个实现类:

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

客户端调用:

public static void main(String[] args) {// 画一个圆形Shape circle = new Circle();circle.draw();// 画一个长方形Shape rectangle = new Rectangle();rectangle.draw();
}

以上是我们常写的代码,我们需要画圆就要先实例化圆,画长方形就需要先实例化一个长方形,然后再调用相应的 draw() 方法。

下面,我们看看怎么用门面模式来让客户端调用更加友好一些。

我们先定义一个门面:

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();}
}

看看现在客户端怎么调用:

public static void main(String[] args) {ShapeMaker shapeMaker = new ShapeMaker();// 客户端调用现在更加清晰了shapeMaker.drawCircle();shapeMaker.drawRectangle();shapeMaker.drawSquare();
}

门面模式的优点显而易见,客户端不再需要关注实例化时应该使用哪个实现类,直接调用门面提供的方法就可以了,因为门面类提供的方法的方法名对于客户端来说已经很友好了。

Java设计模式-结构型-门面模式相关推荐

  1. JAVA设计模式--结构型模式

    2019独角兽企业重金招聘Python工程师标准>>> 我们接着讨论设计模式,上篇文章我讲完了5种创建型模式,这章开始,我将讲下7种结构型模式:适配器模式.装饰模式.代理模式.外观模 ...

  2. JAVA设计模式--结构型模式--代理模式

    1.代理模式(Proxy Pattern) 一个类代表另一个类的功能.这种类型的设计模式属于结构型模式.在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口. 1.1意图: 为其他对象提供 ...

  3. Java设计模式——结构型模式之享元模式

    文章目录 7 享元模式*** 7.1 概述 7.2 结构 7.3 案例实现 7.5 优缺点和使用场景 7.6 JDK源码解析 7 享元模式*** 7.1 概述 定义: ​ 运用共享技术来有效地支持大量 ...

  4. [设计模式-结构型]外观模式(Facade)

    概括 名称 Facade 结构 动机 为子系统中的一组接口提供一个一致的界面,F a c a d e 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 适用性 当你要为一个复杂子系统提供一 ...

  5. [设计模式-结构型]代理模式(Proxy)

    概括 名称 Proxy 结构 动机 为其他对象提供一种代理以控制对这个对象的访问. 适用性 在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用P r o x y 模式.下面是一 些可以使用P ...

  6. Java 设计模式之Facade门面模式

    场景:当外界某个对象与某个系统内的多个组件都要进行交互时,这个系统可以对外提供一个统一的接口,与外界这个对象对接,这样可以对外隐藏系统内部的复杂性,接口内部调用各个组件功能. 实现:定义一个Facad ...

  7. 设计模式-结构型模式篇

    设计模式 目录: 一.代理模式 二.适配器模式 三.装饰者模式 四.桥接模式 五.外观模式 六.组合模式 七.享元模式 注:学习视频:黑马程序员Java设计模式 结构型模式 结构性模式描述如何将类或对 ...

  8. 设计模式(结构型)之享元模式(Flyweight Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  9. 设计模式(16):结构型-桥接模式(Bridge)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

最新文章

  1. 2020快手汽车行业数据价值报告
  2. 微软遭30万人实名抗议:非人道的1914万美元,能不能别赚?
  3. Zend Studio使用Xdebug调试
  4. 解决PyCharm调试查看变量时一直显示collecting data
  5. FL Studio最新汉化免费下载 水果音乐制作软件
  6. python的pyaudio教程入门_Python音频操作工具PyAudio上手教程!
  7. 大专生北漂10年,月薪翻20倍,我的人生从不被学历设限
  8. 自动驾驶汽车也要驾考了,能否上路在此一举,老司机看了考试内容惊呆了!
  9. [BAPI]如何读取采购订单PO审批状态数据-[BAPI_PO_GETRELINFO]
  10. 移动硬盘(USB3.0)1TB 在自己电脑上突然识别不了
  11. Pandas数据分析 - 去重 - duplicated() drop_duplicates() 用法
  12. ch06: 决胜秋招
  13. ADV-201 我们的征途是星辰大海
  14. 网络安全威胁检测与威胁溯源_网络安全威胁2017 –如何保护您的网站
  15. Spring通知(Advice)有哪些类型?
  16. 艾司博讯:拼多多退货运费该有谁承担?
  17. SQL注入攻击的常见方式及测试方法
  18. Android软件开发教学视频(转载)
  19. 推荐5款高效的国产软件,精挑细选让你眼前一亮
  20. Linux学习笔记(二)——文件与磁盘系统

热门文章

  1. 当咖啡师,开咖啡店,要学哪些东西
  2. Mac下安装IP Message-(ipmsg)
  3. 对计算的理解计算机科学导论论文,计算机科学导论论文
  4. Sharding-jdbc连接kingbasev8r6跨表分页
  5. 武汉微软认证考点及考试流程 与 微软认证考试流程
  6. 项目经验之:针对昨日FDO连接SDF文件报错,国个GIS论坛给出了一个思路.帮助我过关.
  7. Linux常用备份恢复工具(1)
  8. Notebook交互式完成目标检测任务
  9. Input的常用属性
  10. GDPR(欧盟通用数据保护条例)基础知识