java获取系统外观_java设计模式-----12、外观模式

Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种。Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面。这个一致的简单的界面被称作facade。

d470e175f8fed8fc422008afb7cc155b.png

外观模式的角色和职责

1、Facade:为调用方定义简单的调用接口。

2、Clients:调用者。通过Facade接口调用提供某功能的内部类群。

3、Packages:功能提供者。指提供功能的类群(模块或子系统)。

使用场景

在以下情况下可以考虑使用外观模式:

(1)设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。

(2) 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。

(3) 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。

简单来说,使用了外观模式,用户就不必直接面对众多功能模块,降低了使用难度,简单举个例子

电脑开机进入系统,我们把他分为4步,首先打开电源,bois自检,系统引导,进入系统,4个功能是四个功能模块

打开电源

1 public classStartPower {2 /*

3 * 打开电源4 */

5 public voidstartPower(){6 System.out.println("电脑通电");7 }8 }

bois自检

1 public classBoisSelfTest {2 /*

3 * bios自检4 */

5 public voidboisSelfTest(){6 System.out.println("bios自检");7 }8 }

系统引导

1 public classSystemGuide {2 /*

3 * 系统引导4 */

5 public voidsystemGuide(){6 System.out.println("系统引导");7 }8 }

进入系统

1 public classEnterSystem {2 /*

3 * 进入系统4 */

5 public voidenterSystem(){6 System.out.println("进入系统");7 }8 }

如果,我们没有使用外观模式,就需要用户自己挨个使用这些功能

1 public classMainClass {2 public static voidmain(String[] args) {3 StartPower startPower = newStartPower();4 startPower.startPower();5

6 BoisSelfTest boisSelfTest = newBoisSelfTest();7 boisSelfTest.boisSelfTest();8

9 SystemGuide systemGuide = newSystemGuide();10 systemGuide.systemGuide();11

12 EnterSystem enterSystem = newEnterSystem();13 enterSystem.enterSystem();14 }15 }

运行结果为:

f32dd4d8d74b3cf006b568ee2cc2d3e9.png

这样,电脑顺利启动,可是同样可以看出来,用户使用非常繁琐,不仅需要用户自己挨个使用所有用到的功能,同时还需要用户知道电脑启动的顺序,按顺序使用功能,不然就会导致问题,这样显然是不可取的

所以,用到外观模式,创建一个Facade,专门用于使用功能模块

1 public classFacade {2 private StartPower startPower = null;3 private BoisSelfTest boisSelfTest = null;4 private SystemGuide systemGuide = null;5 private EnterSystem enterSystem = null;6

7 public voidstartComputer(){8 startPower = newStartPower();9 boisSelfTest = newBoisSelfTest();10 systemGuide = newSystemGuide();11 enterSystem = newEnterSystem();12

13 startPower.startPower();14 boisSelfTest.boisSelfTest();15 systemGuide.systemGuide();16 enterSystem.enterSystem();17 }18 }

这时客户端就是这样

1 public classMainClass {2 public static voidmain(String[] args) {3 Facade computer = newFacade();4 computer.startComputer();5 }6 }

可以看到,用户这时只需要调用Facade中的方法即可,无需知道电脑有什么具体的功能模块,无需知道功能模块执行的顺序是什么,只是调用一下就好了。

简化了使用,同时也增加了代码的复用与可维护性。

优点

1、松散耦合:使得客户端和子系统之间解耦,让子系统内部的模块功能更容易扩展和维护;

2、简单易用:客户端根本不需要知道子系统内部的实现,或者根本不需要知道子系统内部的构成,它只需要跟Facade类交互即可。

3、更好的划分访问层次:有些方法是对系统外的,有些方法是系统内部相互交互的使用的。子系统把那些暴露给外部的功能集中到门面中,这样就可以实现客户端的使用,很好的隐藏了子系统内部的细节。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值