设计模式----外观模式

外观模式:

提供了一个统一接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

设计原则--“最少知识”原则,减少对象之间的交互。

有时候我们完成一件事,是有一套完整的动作的,我们可以把这些动作封装到一个类里面,可以让子系统更加好用。比如我们小时候玩小霸王游戏机,我们要:打开电视、打开游戏机、插入游戏卡、插入手柄等。在程序中电视、游戏机、游戏卡、手柄等都是类,如果不使用外观模式,每当我们想打游戏,都要创建这四个类,然后调用他们的相关方法,这样很麻烦。外观模式就是让我们写一个打游戏类,然后在这个类中封装这些对象和方法。

示例代码:

public class PlayGame {
    //组合:我们会用到的子系统组件全部在这里
    TV tv;
    GamePlayer gameplayer;
    GameCard gamecard;
    //构造器
    public HomeTheaterFacade(TV tv,GamePlayer gameplayer,GameCard gamecard) {
        this.tv= tv;
        this.gameplayer= gameplayer;
        this.gamecard= gamecard;
    }
    //打游戏
    public void playGame(){
        tv.on();
        gameplayer.on();
        gamecard.on();
    }
     //玩游戏结束
    public void engGame(){
        tv.off();
        gameplayer.off();
        gamecard.off();
    }
}

优点:

  • 松散耦合:使得客户端和子系统之间解耦,让子系统内部的模块功能更容易扩展和维护;
  • 简单易用:客户端根本不需要知道子系统内部的实现,或者根本不需要知道子系统内部的构成。
  • 更好的划分访问层次:有些方法是对系统外的,有些方法是系统内部相互交互的使用的。子系统把那些暴露给外部的功能集中到门面中,这样就可以实现客户端的使用,很好的隐藏了子系统内部的细节。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小狼的世界

PHP开源Apache日志分析工具收集与比较

我们知道已经有很多像Awtstat这样的使用perl、c或者c++开发的强大的日志分析工具,但是同样也有很多使用PHP开发并且开源的日志分析软件,今天我就收集了...

39020
来自专栏纯洁的微笑

[高级]关于分布式事务、两阶段提交协议、三阶提交协议

在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。为了对用户提供正确的增\删\改\差等...

13030
来自专栏草根专栏

Python数据分析(二): Numpy技巧 (4/4)

numpy、pandas、matplotlib(+seaborn)是python数据分析/机器学习的基本工具。 numpy的内容特别丰富,我这里只能介绍一下比较...

32890
来自专栏携程技术中心

开源 | 携程Redis多数据中心解决方案-XPipe

作者简介 孟文超,携程技术中心框架研发部高级经理。2016年加入携程,目前主要负责Redis多数据中心项目XPipe。此前曾在大众点评工作,任基础架构部门通信团...

639100
来自专栏微信小开发

整合微信小程序的Web API接口层的架构设计

来源:伍华聪 cnblogs.com/wuhuacong/p/7267333.html 例如:《C#开发微信门户及应用--微信各个项目模块的定义和相互关系》介绍...

444100
来自专栏Eternally运维

FinalShell – SSH终端,同屏SFTP,同步目录切换一体化服务器管理

简介 FinalShell是一体化的的服务器,网络管理软件,功能强大的开发,运维工具,充分满足开发,运维需求.

24910
来自专栏IT技术精选文摘

分布式系统关键技术之全栈监控

容量管理 提供一个全局的系统运行时数据展示,可以让其它工程师知道是否需要加机器或资源

18320
来自专栏Java职业技术分享

后端技能树修炼:基于队列的流量削峰模式

在分布式架构中,前端一个请求会经过后端的多个服务的处理才返回结果,这时就可能会存在一种情况,在间歇性高负载情况下,某个服务 B 的处理能力不能满足负载的需求,从...

10700
来自专栏编程

DNS 负载均衡:如何提升网站性能

如果你想提高你的网站或Web应用程序的访问速度,DNS负载均衡或许可以帮助你实现这一目标。通过帮助你分散收到的流量,有助于使网站以最佳的速度运行。 ? 什么是D...

39060
来自专栏Rainbond开源「容器云平台」

云帮每周更新日志(2017.01.02~2017.01.15)

18240

扫码关注云+社区

领取腾讯云代金券