为了账号安全,请及时绑定邮箱和手机立即绑定
首页 手记 【九月打卡】第15天+外观设计模式(结构型)(门面模式)

【九月打卡】第15天+外观设计模式(结构型)(门面模式)

2022.09.19 20:48 51浏览

课程名称:Java设计模式精讲 Debug方式+内存分析

课程章节:第9章 原型模式讲解+Coding+源码解析

主讲老师:Geely

课程内容:

外观设计模式(结构型)(门面模式)

问题1)定义?

对外它给使用者提供了一个统一的接口(或类),对内它封装子系统。(外观者的例子最典型的就是日志。)
具体操作:定义一个高层接口(或类),将子系统注入到外观类中,客户端调用外观类,不关心子系统

外观角色:了解子系统的所有方法,还有自己的方法。

客户端调用外观角色。

两个角色:

门面(Facade)角色 :客户端可以调用这个角色的方法。此角色知晓相关的(一个或者多个)子系统的功能和责任。在正常情况下,本角色会将所有从客户端发来的请求委派到相应的子系统去。

子系统(SubSystem)角色 :可以同时有一个或者多个子系统。每个子系统都不是一个单独的类,而是一个类的集合(如上面的子系统就是由ModuleA、ModuleB、ModuleC三个类组合而成)。每个子系统都可以被客户端直接调用,或者被门面角色调用。子系统并不知道门面的存在,对于子系统而言,门面仅仅是另外一个客户端而已。

问题2)使用场景?

子系统多而且复杂,增加外观模式提供简单调用接口。

构建多层系统结构,利用外观对象作为每层的入口。简化层间调用。

外观模式是迪米特法则,最少知道原则的体现。

外观模式(门面模式)的作用就是,统一了请求接口。如果没有门面模式,请求者需要,一个个的去调用这些接口才能完成任务。现在只需要调用一个统一的外观(门面)接口,就可以。

问题3)优点和缺点?

**优点:**简化了调用过程,无需了解子系统。

减少系统依赖,松散耦合。

更好的划分访问层次。

符合迪米特法则,即知道最少原则。

**缺点:**不符合开闭原则,

增加子系统,扩展系统行为容易引入风险。

问题4)外观模式和中介模式区别?和单例模式,抽象工厂的使用?

外观模式关注的是,外界和子系统之间的交互。

中介模式关注的是,子系统内部之间的交互。

外观模式和单例模式: 通常我们将外观模式的外观角色做成单例模式的。

外观类可以通过抽象工厂,获取子系统的实例。

问题5)外观模式的实例?

积分兑换礼物包含三个子系统:校验积分,支付积分,物流。三个子系统。

这个三个子系统通过一个外观类,将三个子系统通过成员变量注入到外观类当中。客户端直接调用外观类,不需要自己创建这三个子系统的对象。而是通过外观类自己创建。(通过直接new,或者注入的方式。)

如图:test只关心外观类。客户端test只创建外观类,其他三个子系统都是由外观类创建。

例如:门面模式就是提供统一的对外接口(接口不是指的java的接口概念,而是对外开放的api。)

如果没有这个门面,包工头。我们想建一个房子,就需要去自己找和泥的,搬砖的,砌墙的。去管理好流程。先和泥,后搬砖,最后砌墙。

例子:

public class mix_mortar {

public void mixMorter(){

System._out_.println("我正在mixMorter和泥");

}

}

  

public class moving_bricks {

public void moving_bricks(){

System._out_.println("我正在搬砖...");

}

}

  

public class masonry_wall {

public void masonryWall(){

System._out_.println("我正在砌墙...");

}

}

  

public class facadeTest001 {

  

public void facadeTest(){

masonry_wall warll = new masonry_wall();

mix_mortar mortar = new mix_mortar();

moving_bricks bricks = new moving_bricks();

mortar.mixMorter();

bricks.moving_bricks();

warll.masonryWall();

}

}

问题6)外观模式在jdk的使用?

例如:log4j日志。就使用了门面模式。提供统一的接口。屏蔽了底层不同的实现。

1、JdbcUtils 中的方法都是封装了各种子系统。

closeConnection()

closeConnection()

closeResultSet() 等方法。都是通过封装子系统的方法。

2、Tomcat源码中使用了很多外观模式。通过搜索 façade类就可以找到很多。

RequestFacade等

点击查看更多内容
0人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
1
获赞与收藏
5

关注TA,一起探索更多经验知识

同主题相似文章浏览排行榜

风间影月说签约讲师

50篇手记,涉及Java、MySQL、Redis、Spring等方向

进入讨论

Tony Bai 说签约讲师

146篇手记,涉及Go、C、Java、Python等方向

进入讨论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消