首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >23种设计模式,外观模式实战

23种设计模式,外观模式实战

原创
作者头像
小马哥学JAVA
发布于 2024-04-06 04:55:13
发布于 2024-04-06 04:55:13
1980
举报

外观模式(Facade Pattern)是一种使用频率非常高的结构型设计模式,其核心思想是为子系统中的一组接口提供一个一致的界面。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。简而言之,外观模式就是客户端与复杂子系统之间的一个简单而统一的接口。

外观模式的概念

在软件系统中,由于系统的复杂性及对模块间解耦的需要,引入外观模式可以减少系统的相互依赖,提高灵活性。通过创建一个外观类,可以将复杂的系统流程简化,客户端通过调用外观类的方法来调用子系统中的一系列方法,而不需要直接与子系统交互,减少了系统的耦合度。

外观模式的优点

  1. 降低了客户端与子系统之间的耦合度:客户端只需要与外观类交互,不需要直接与子系统内部的复杂结构打交道。
  2. 简化了客户端的使用过程:为子系统中的一组接口提供了一个一致的界面,使得子系统更加容易被使用。
  3. 提高了系统的灵活性和安全性:外观类封装了子系统的接口,使得对子系统的修改不会影响到客户端。

外观模式的缺点

  1. 不符合开闭原则:当添加新的子系统或者移除现有子系统时,可能需要修改外观类或客户端的代码。
  2. 可能会导致系统过于复杂:如果过度使用外观模式,可能会增加系统中类的数量,从而增加系统的复杂度。

Java代码示例

假设我们有一个复杂的影院管理系统,包含多个子系统,如灯光控制、影音设备控制等。我们可以使用外观模式来简化与这些子系统的交互过程。

首先,定义子系统的接口:

java复制代码

代码语言:javascript
AI代码解释
复制
class Light {
    public void on() {
        System.out.println("Light is on");
    }

    public void off() {
        System.out.println("Light is off");
    }
}

class Projector {
    public void on() {
        System.out.println("Projector is on");
    }

    public void off() {
        System.out.println("Projector is off");
    }
}

class SoundSystem {
    public void on() {
        System.out.println("Sound system is on");
    }

    public void off() {
        System.out.println("Sound system is off");
    }
}

然后,创建外观类HomeTheaterFacade

java复制代码

代码语言:javascript
AI代码解释
复制
class HomeTheaterFacade {
    private Light light;
    private Projector projector;
    private SoundSystem soundSystem;

    public HomeTheaterFacade(Light light, Projector projector, SoundSystem soundSystem) {
        this.light = light;
        this.projector = projector;
        this.soundSystem = soundSystem;
    }

    public void watchMovie() {
        light.off();
        projector.on();
        soundSystem.on();
        System.out.println("Enjoy the movie!");
    }

    public void endMovie() {
        light.on();
        projector.off();
        soundSystem.off();
        System.out.println("Movie is over");
    }
}

最后,客户端代码示例:

java复制代码

代码语言:javascript
AI代码解释
复制
public class Client {
    public static void main(String[] args) {
        HomeTheaterFacade homeTheater = new HomeTheaterFacade(new Light(), new Projector(), new SoundSystem());
        homeTheater.watchMovie(); // 开始看电影
        homeTheater.endMovie(); // 电影结束
    }
}

这个例子展示了如何使用外观模式简化客户端与复杂子系统之间的交互,客户端通过调用外观类的方法来实现操作,无需直接与子系统中的多个类交互,从而简化了客户端与复杂子系统之间的交互操作。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL5.7安装
张哥编程
2024/12/07
2270
centos7 安装mysql5.6
参考: https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/ https://www.cnblogs.com/zhangyin6985/p/6307219.html
我是李超人
2020/08/21
5220
centos7 安装mysql8.0
mysql的下载安装 在mysql官网获取yum源安装包 http://dev.mysql.com/downloads/repo/yum/ 复制下载链接地址为: mysql80-community-release-el7-3.noarch.rpm # 下载和安装 wget http://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm rpm -ivh mysql80-community-release-el7-3.noarch.rpm
CODER_D_XF
2020/12/12
8.2K0
CentOS7下使用YUM安装MySQL5.6
注意:在新版本的CentOS7中,默认的数据库已更新为了Mariadb,而非 MySQL,所以执行 yum install mysql 命令只是更新Mariadb数据库,并不会安装 MySQL 。
全栈程序员站长
2022/07/01
8430
CentOS7下使用YUM安装MySQL5.6
centos7和centos8安装mysql5.6 5.7 8.0原来这么简单
https://dev.mysql.com/downloads/repo/yum/
Windows技术交流
2020/05/08
6.1K0
基于Linux安装Mysql5.7
可能会如下报错: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 原因:原因是/var/lib/mysql的访问权限问题。
黎明大大
2020/09/08
7230
基于Linux安装Mysql5.7
centos7下MySQL5.7安装配置
环境准备 在安装MySQL之前,我们需要安装一下MySQL的依赖。 更新yum源 yum update 下载MySQL wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm MySQL repo安装 rpm -ivh mysql57-community-release-el7-9.noarch.rpm 正式安装 安装命令 yum install mysql-server 启动命令 systemctl star
嘉美伯爵
2021/01/18
6680
mysql+centos7+主从复制
MYSQL(mariadb) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。 开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源
超蛋lhy
2018/08/31
5730
mysql+centos7+主从复制
centos7 安装 mysql 详解
下载地址 : https://dev.mysql.com/downloads/mysql/
IT小马哥
2020/03/18
1.3K0
MySQL5.7安装与配置(YUM) 原
在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo/yum/
拓荒者
2019/03/11
6320
MySQL5.7安装与配置(YUM)
                                                                            原
CentOS安装mysql
在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB。
1900
2022/12/05
2.3K0
CentOS安装mysql
Centos7.6安装MySQL+Redis(最新版)
1、下载mysql,地址:http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm 2、使用xftp上传到自己想要得目录 3、代码操作,安装并重启mysql服务
Java猫说
2019/04/11
3K0
Linux安装MySql5.7——在centos7中与MySQL5.7安装的相恨相杀
CentOS7的yum源中默认好像是没有mysql的。为了解决这个问题,我们要先下载mysql的repo源。(注意root用户权限问题)
不愿意做鱼的小鲸鱼
2022/09/26
8110
Linux安装MySql5.7——在centos7中与MySQL5.7安装的相恨相杀
LINUX CENTOS7下安装MYSQL5.6
systemctl restart mysqld.service #重启 systemctl stop mysqld.service #停止 systemctl enable mysqld.service #设置开机启动
用户4988376
2021/08/09
1.7K0
手把手教你在centos7中安装mysql数据库
CentOS 7 版本将MySQL数据库软件从默认的程序列表中移除,用mariadb代替了。 所以要安装mysql有两种方法,一种是直接安装mariadb,另一种是从官网下载mysql手动安装 这里只介绍第二种方法。
尾尾部落
2018/09/04
1.2K0
Centos安装MySql5.5(yum安装)
Centos安装MySql5.5(yum安装),支持Centos6.x 7.x(64位) 1、卸载残留环境 rpm -qa | grep mysql rpm -qa | grep mariadb rpm -e --nodeps #上边命令查询的结果 2、安装rpm源 rpm -ivh http://repo.mysql.com/yum/mysql-5.5-community/el/6/x86_64/mysql-community-release-el6-5.noarch.rpm 修改/etc/yum.re
4xx.me
2022/06/10
1.4K0
CentOS在线安装Mysql5.7
官方地址:https://dev.mysql.com/downloads/repo/yum/
名山丶深处
2022/05/10
1.3K0
中班小朋友都会的 CentOS 7 下安装MySQL 5.7!
准备工作 我们使用yum安装,轻松加愉快! 为了后续下载MySQL速度快一点,我们可以更换一下CentOS默认的yum源,就换成阿里的。 # 看一下默认的yum源 cd /etc/yum.repos.d/ && ll # 备份原来的yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup # 下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/ wget -O /et
行百里er
2020/12/02
6170
中班小朋友都会的 CentOS 7 下安装MySQL 5.7!
CentOS7下安装mysql5.7
从CentOS 7开始使用 MariaDB 替代默认的 MySQL,由于CentOS7 的yum源中没有mysql,需要到mysql的官网下载yum repo配置文件。
流柯
2018/12/17
1.1K1
YUM安装MYSQL5.6
创建用户的时候会出现上图中警告的内容,意思是在命令行界面上使用密码是不安全的,直接略过即可。
用户4988376
2021/08/09
1.7K0
相关推荐
MySQL5.7安装
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档