Java设计模式详解之门面模式(外观模式)
门面模式(Facade Pattern)也叫外观模式,它隐藏系统的复杂性,并向客户端提供一个可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性,为子系统中的一组接口提供了一个统一的高层访问接口,这个接口使得子系统更容易被访问或使用。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。
简而言之,就是把一堆复杂的流程封装成一个接口供给用户更简单的使用,这个设计模式里有三个角色:
1)门面角色( facade ):这是门面模式的核心。它被客户角色调用,因此它熟悉子系统的功能。它内部根据客户角色已有的需求预定了几种功能组合。
2)子系统角色(subsystem):实现了子系统的功能。对它而言, façade 角色就和客户角色一样是未知的,它没有任何 façade 角色的信息和链接。
3)客户角色:调用 façade 角色来完成要得到的功能。
下面是一个简单的实现实例:
// 定义了一个统一的入口 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 class FacadePatternDemo { public static void main(String[] args) { ShapeMaker shapeMaker = new ShapeMaker(); shapeMaker.drawCircle(); shapeMaker.drawRectangle(); shapeMaker.drawSquare(); } }
图1:UML图示
class DrawerOne { public void open() { System.out.println("第一个抽屉被打开了"); getKey(); } public void getKey() { System.out.println("得到第二个抽屉的钥匙"); } } class DrawerTwo { public void open() { System.out.println("第二个抽屉被打开了"); getFile(); } public void getFile() { System.out.println("得到这个重要文件"); } } class DrawerFacade { DrawerOne darwerOne = new DrawerOne(); DrawerTwo darwerTwo = new DrawerTwo(); public void open() { darwerOne.open(); darwerTwo.open(); } } public class DrawerClient { public static void main(String[] args) { DrawerFacade drawer = new DrawerFacade(); drawer.open(); } }
门面模式使用场景:
(1)为复杂的模块或子系统提供外界访问的模块。
(2)子系统相对独立。
(3)在层次化结构中,可以使用外观模式定义系统中每一层的入口。
以上所述是小编给大家介绍的Java设计模式详解之门面模式(外观模式),希望对大家有所帮助!
相关文章
解决Mybatis的serverTimezone时区出现问题
这篇文章主要介绍了解决Mybatis的serverTimezone时区出现问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-09-09SpringBoot如何通过Feign调用传递Header中参数
这篇文章主要介绍了SpringBoot通过Feign调用传递Header中参数,本文给大家分享两种解决方案给大家详细讲解,需要的朋友可以参考下2023-04-04java为什么使用BlockingQueue解决竞态条件问题面试精讲
这篇文章主要为大家介绍了java为什么使用BlockingQueue解决竞态条件问题面试精讲,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-10-10Spring Boot打jar包后配置文件的外部优化配置方法
这篇文章主要介绍了Spring Boot打jar包后配置文件的外部优化配置方法,需要的朋友可以参考下2018-02-02Spring Data Jpa 复杂查询方式总结(多表关联及自定义分页)
这篇文章主要介绍了Spring Data Jpa 复杂查询方式总结(多表关联及自定义分页),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-02-02
最新评论