外观模式 矫情吗;* 2022-05-07 02:58 180阅读 0赞 我发现写设计模式的文章,怎么举例子是个技术活啊。。。很多东西你不实际去用真的不会真正的体会到设计模式带来的一些好处,最近公司的一个客户要做一个考勤功能,这个功能虽然是我们公司产品的标准功能,但是有些东西还是二次开发一下的。虽然很费劲的实现了大致的功能,但是代码乱的一塌糊涂,趁着周末整理了一下代码,也试着用了一下模版方法模式(计算出勤率),适配器模式(考勤接口和工资接口的对接),在我把23种设计模式学习完之后,再来说一说实际的运用把,今天聊了聊外观模式。 在上面我说了一个考勤功能,我们通过这个考勤功能分析一下外观模式,在客户的这个系统中,考勤最主要的作用就是计算工资,但是因为工资这个模块并不是我做的,所以我要放开一个接口,提供给我的同事一些数据,比如出勤率,个人扣分情况等等。这个内部实现其实还是有些复杂的。因为我要考虑他是否正常打卡,是否是周末,是否是法定假期,没有正常打卡的话是否请假,是否补卡,针对请假类型,迟到早退等等计算他所扣的分数。但是这些东西,我的同事肯定不会关心,他只要传递一个人员ID到我开放的接口上,我就把他所需数据返回回去就可以了。换句话说,为复杂的模块提供外界访问的模块,来隐藏系统的复杂性。这就是外观模式。 > 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 > > 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。 那我们通过代码来看一下吧。首先是我考勤功能的接口定义,接口有两个方法,一个是工作日的计算一个出勤天数的计算 interface Attence { //工作日 void getWorkDay(); //出勤天数 void getRealWorkDay(int userID); } 在我的考勤功能中,有一般员工和特殊员工,他们的工作日的计算方法是不同的,但是出勤天数这个方法计算是相同的,我们让两种员工都去实现这个出勤天数就显得繁琐了,这个时候怎么办呢?我使用抽象类解决这个问题。 abstract class AbstractAttence implements Attence { @Override public abstract void getWorkDay(); @Override public void getRealWorkDay(int userID) { System.out.println(userID + "的人员出勤天数为XX天"); } } 这个抽象方法中,保留了工作日的计算,实现了出勤天数的计算,那我们就来具体实现两种员工了: //一般工作人员打卡 class Card extends AbstractAttence { @Override public void getWorkDay() { System.out.println("一般员工,周一到周五打卡,工作日大约22天"); } } 特殊员工: //特殊人员打卡 class CardSpecial extends AbstractAttence { @Override public void getWorkDay() { System.out.println("特殊员工:柜员,工作日大约为15天"); } } 具体的实现方法这里就隐藏了。走到这里就进入了最关键的一步了,就是外观模式的访问的接口。这个接口应该提供获取两种员工工作日,已经人员出勤天数的数据。 //外观类 class Facade { Attence attence = new Card(); Attence attence1 = new CardSpecial(); public void getData(int temp) { if (temp == 0) { attence.getWorkDay(); } else { attence1.getWorkDay(); } } public void getRealWorkDay(int userID) { attence.getRealWorkDay(userID); } } 走到这里我想你已经知道什么是外观模式,我觉得不是特别难理解,个人来说,平时使用这种模式还是很多的,但是我并不知道这是外观模式。 看一下效果: Connected to the target VM, address: '127.0.0.1:49917', transport: 'socket' 一般员工,周一到周五打卡,工作日大约22天 特殊员工:柜员,工作日大约为15天 12的人员出勤天数为XX天 Disconnected from the target VM, address: '127.0.0.1:49917', transport: 'socket' Process finished with exit code 0 例子举完了,那么我们聊一下理论的东西 **意图:**为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 **主要解决:**降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。 **优点:** 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。 **缺点:**不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。 **使用场景:** 1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。 3、预防低水平人员带来的风险。 **注意事项:**在层次化结构中,可以使用外观模式定义系统中每一层的入口。 更多文章请关注公众号:每天学Java。想获得更多最新面试提醒请进入小程序:每天学Java 公众号二维码: 小程序二维码: ![70][] ![70 1][] [70]: https://img-blog.csdn.net/20180821214620778?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxNDQyMjcwNjM2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70 [70 1]: /images/20220506/991a7d14ef2b49559c6f4a38695395d0.png
相关 外观模式 外观模式 外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 外观模式结构图: ![这里写图片描述][ 不念不忘少年蓝@/ 2022年06月05日 05:39/ 0 赞/ 139 阅读
相关 外观模式 外观模式 外观模式:提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 要点: 1. 外观模式为复杂子系统提供了一个简单 秒速五厘米/ 2022年05月25日 07:50/ 0 赞/ 217 阅读
相关 外观模式 我发现写设计模式的文章,怎么举例子是个技术活啊。。。很多东西你不实际去用真的不会真正的体会到设计模式带来的一些好处,最近公司的一个客户要做一个考勤功能,这个功能虽然是我们公司产 矫情吗;*/ 2022年05月07日 02:58/ 0 赞/ 181 阅读
相关 外观模式 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 阅读
还没有评论,来说两句吧...