外观模式 拼搏现实的明天。 2021-12-04 08:13 215阅读 0赞 **外观模式(Facade Pattern):**又称门面模式。外部通过一个统一的接口,访问子系统中的一群接口。外观模式定义了一个高层接口,为子系统中的一组接口提供了一个一致的入口,使得子系统更容易使用。外观模式是一种对象结构型模式 外观模式结构中,包含两个角色,外观角色和子系统角色 外观角色(Facade):客户端调用这个角色,通过外观角色将客户端的请求委派到相关的子系统中 子系统角色(SubSystem):子系统角色可以有一个或多个,其中每一个子系统可以是单独的类或类的集合 外观模式,使客户类与子系统之间的通信和相互依赖关系降到最低,降低了系统的复杂度,很好的体现了迪米特法则 下面以买书为例讲解外观模式 我们想要买一本书,一般直接去书店或者联系出版社,很少有人会自己从排版、印刷、到装订来自己制作一本想要的书。我们想要一本书,不是自己一道道工序的去制作,而是通过出版社直接购买,将书籍制作的过程交给出版社,由出版社去排版、印刷、装订。这里,出版社就充当了外观角色,而排版、印刷、装订分别为子系统角色 下边代码演示外观模式 定义排版服务 package com.design.structural.facade; /** * 排版服务 */ public class TypesetService { public void typesetBook(){ System.out.println("书籍排版完成"); } } 定义印刷服务 package com.design.structural.facade; /** * 印刷服务 */ public class PrintService { public void printBook(){ System.out.println("书籍印刷完成"); } } 定义装订服务 package com.design.structural.facade; /** * 装订服务 */ public class BindService { public void bindBook(){ System.out.println("书籍装订完成"); } } 定义出版社 package com.design.structural.facade; public class PublisherService { //排版服务 private TypesetService typesetService; //印刷服务 private PrintService printService; //装订服务 private BindService bindService; public PublisherService(){ typesetService = new TypesetService(); printService = new PrintService(); bindService = new BindService(); } //出版书籍 public void publishBook(){ typesetService.typesetBook(); printService.printBook(); bindService.bindBook(); } } 类图如下 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dzanp6Y2Jx_size_16_color_FFFFFF_t_70][] 排版、印刷、装订三个子系统角色通过出版社这个外观角色统一进行调用 测试调用 package com.design.structural.facade; public class TestMain { public static void main(String[] args) { PublisherService publisherService = new PublisherService(); publisherService.publishBook(); } } 效果如下 ![20190718112035534.png][] **扩展** (1)在标准外观模式中,增加或删除与外观类相关的子系统类时,必然要修改外观类或客户端的源代码,这违背了开闭原则,因此可以引入抽象类来对系统进行改进,引入抽象外观类,一旦业务变更,客户端可以通过更换具体外观类来完成,而不必修改源代码 (2)外观模式与单例模式。很多时候,为了节省系统资源,系统中只需要一个外观实例,因此外观实例可以是一个单例类。当将外观类设计成单例类时,它一定是一个具体外观类,而不是抽象外观类 **外观模式总结** 优点:简化调用过程,不需要了解子系统,防止带来风险;减少系统依赖、松散耦合;划分访问层次 缺点:增加子系统需要修改外观类源代码,违背了开闭原则 适用场景:子系统复杂,通过外观模式提供一个简单的入口;需要构建多层结构,降低层之间耦合度 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dzanp6Y2Jx_size_16_color_FFFFFF_t_70]: /images/20211204/c22634d1883a4e6b8785aef462cc7345.png [20190718112035534.png]: /images/20211204/adc9745d93ec42acbef0a71d38ac55b5.png
相关 外观模式 外观模式 外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式结构图: ![这里写图片描述][ 不念不忘少年蓝@/ 2022年06月05日 05:39/ 0 赞/ 138 阅读
相关 外观模式 外观模式 外观模式:提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 要点: 1. 外观模式为复杂子系统提供了一个简单 秒速五厘米/ 2022年05月25日 07:50/ 0 赞/ 217 阅读
相关 外观模式 我发现写设计模式的文章,怎么举例子是个技术活啊。。。很多东西你不实际去用真的不会真正的体会到设计模式带来的一些好处,最近公司的一个客户要做一个考勤功能,这个功能虽然是我们公司产 矫情吗;*/ 2022年05月07日 02:58/ 0 赞/ 180 阅读
相关 外观模式 Alen自从毕业后开始做软件开发,做着做着发现不爽了,钱赚不了太多,头发也白了。于是拿着一点小资本,想着做点小生意。瞅着眼前的餐饮行业还不错,于是打算开一家正新鸡排。烤鸡排可不 谁践踏了优雅/ 2022年02月01日 02:05/ 0 赞/ 186 阅读
相关 外观模式 前言 外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义一个高层的接口,这个接口使得这一子系统更加容易使用。 一、子类 子类系统 分手后的思念是犯贱/ 2021年12月09日 00:45/ 0 赞/ 221 阅读
相关 外观模式 外观模式(Facade Pattern):又称门面模式。外部通过一个统一的接口,访问子系统中的一群接口。外观模式定义了一个高层接口,为子系统中的一组接口提供了一个一致的入口,使 拼搏现实的明天。/ 2021年12月04日 08:13/ 0 赞/ 216 阅读
相关 外观模式 [2019独角兽企业重金招聘Python工程师标准>>> ][2019_Python_] ![hot3.png][] 1.定义 [外观模式][Link 1],外观模式([F 阳光穿透心脏的1/2处/ 2021年09月20日 04:40/ 0 赞/ 246 阅读
相关 外观模式 9.外观模式 ![70][]![70 1][] class Client { static void Main(stri 柔光的暖阳◎/ 2021年09月16日 23:56/ 0 赞/ 257 阅读
相关 外观模式 一 点睛 有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个 绝地灬酷狼/ 2021年07月24日 22:08/ 0 赞/ 349 阅读
相关 外观模式 观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏... 小灰灰/ 2020年06月13日 05:54/ 0 赞/ 662 阅读
还没有评论,来说两句吧...