Java设计模式——外观模式

2023-11-18

文章目录

外观模式

外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中没有涉及到接口,看下类图:(我们以一个计算机的启动过程为例)
在这里插入图片描述

public class CPU {  
      
    public void startup(){  
        System.out.println("cpu startup!");  
    }  
      
    public void shutdown(){  
        System.out.println("cpu shutdown!");  
    }  
} 
public class Memory {  
      
    public void startup(){  
        System.out.println("memory startup!");  
    }  
      
    public void shutdown(){  
        System.out.println("memory shutdown!");  
    }  
}  
public class Disk {  
      
    public void startup(){  
        System.out.println("disk startup!");  
    }  
      
    public void shutdown(){  
        System.out.println("disk shutdown!");  
    }  
}  
public class Computer {  
    private CPU cpu;  
    private Memory memory;  
    private Disk disk;  
      
    public Computer(){  
        cpu = new CPU();  
        memory = new Memory();  
        disk = new Disk();  
    }  
      
    public void startup(){  
        System.out.println("start the computer!");  
        cpu.startup();  
        memory.startup();  
        disk.startup();  
        System.out.println("start computer finished!");  
    }  
      
    public void shutdown(){  
        System.out.println("begin to close the computer!");  
        cpu.shutdown();  
        memory.shutdown();  
        disk.shutdown();  
        System.out.println("computer closed!");  
    }  
}  
public class User {  
  
    public static void main(String[] args) {  
        Computer computer = new Computer();  
        computer.startup();  
        computer.shutdown();  
    }  
}  

如果我们没有Computer类,那么,CPU、Memory、Disk他们之间将会相互持有实例,产生关系,这样会造成严重的依赖,修改一个类,可能会带来其他类的修改,这不是我们想要看到的,有了Computer类,他们之间的关系被放在了Computer类里,这样就起到了解耦的作用,这,就是外观模式!

介绍
意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。

何时使用: 1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个”接待员”即可。 2、定义系统的入口。

如何解决:客户端不与系统耦合,外观类与系统耦合。

关键代码:在客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好。

应用实例: 1、去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。 2、JAVA 的三层开发模式。

优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。

缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

使用场景: 1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。 3、预防低水平人员带来的风险。

注意事项:在层次化结构中,可以使用外观模式定义系统中每一层的入口。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java设计模式——外观模式 的相关文章

  • 面试题61. 扑克牌中的顺子(java+python)

    从若干副扑克牌中随机抽 5 张牌 判断是不是一个顺子 即这5张牌是不是连续的 2 10为数字本身 A为1 J为11 Q为12 K为13 而大 小王为 0 可以看成任意数字 A 不能视为 14 示例 1 输入 1 2 3 4 5 输出 Tru
  • hex文件格式学习记录

    hex文件 hex文件是什么 hex文件的数据结构 按照记录类型具体分析 Mermaid Flowchart hex文件是什么 它是由一行行符合Intel HEX 文件格式的文本所构成的ASCII 文本文件 每一行包含一 个 HEX 记录
  • Java实验三 基于GUI的网络通信程序设计【代码构建逻辑】【双向通信】【超多细节优化!!】

    写在前面 这次实验代码的构建主要是更加熟练的运用socket网络编程 文件输入输出流 GUI设计 容器的使用 多线程的运用等等多方面的知识 是综合类题型 做完受益身心的类型 题目如下 编写程序完成以下功能 1 设计一个基于GUI的客户 服务
  • iOS的几个特效实现思路

    最近看一个app的源码 发现基本没有用第三方的开源组件 但是特效也做得不错 总结一下实现的思路 简单的抽屉效果 效果如图 这种抽屉效果很常见 开源组件也很多 但是一般开源组件都对Controller的结构有要求 有时候不是很方便 原理主要是
  • qmake手册(Qt5.9.3)

    qmake手册 qmake手册 概观 描述一个项目 建立一个项目 使用第三方库 预编译头文件 入门 从简单的开始 使应用程序可调试 添加平台特定的源文件 如果文件不存在停止qmake 检查多个条件 创建项目文件 项目文件元素 变量 注释 内

随机推荐

  • 小程序报错:Unexpected end of JSON input

    报错原因 跳转页面传参内包含英文 let data aaa 你学会了吗 由于参数内携带英文 所以报错 wx navigateTo url home home data encodeURI JSON stringify data 解决方法 先
  • ECCV20 - OCRNet:聚合对象上下文特征用于语义分割《Object-Contextual Representations for Semantic Segmentation》

    文章目录 原文地址 论文阅读方法 初识 相知 主要技术 部分实验 回顾 原文地址 原文 论文阅读方法 三遍论文法 初识 对于语义分割这类密集预测任务 上下文特征是非常重要的信息 在早期的一些工作中 主要着重于捕获多尺度特征 空间维度 比如P
  • Golang学习笔记 结构体和指针

    Golang是一门很特殊的语言 虽然它出生比较晚 但是在很多地方却和现在的编程语言有所不同 现在的编程语言要么是函数式的 要么是面向对象的 而Go语言却有指针 结构体这些概念 并解决了C语言的一些坑 从这个角度上说 Golang可以看做C语
  • 【mysql】-【innodb数据存储结构】

    文章目录 数据库的存储结构 页 磁盘与内存交互基本单位 页 页结构概述 页的大小 页的上层结构 页的内部结构 File Header 文件头部 和File Trailer 文件尾部 File Header 文件头部 38字节 File Tr
  • Vue3-导出excel表格

    安装xlsx和file saver yarn add file saver xlsx 或 npm install file saver S npm install xlsx S 页面引入xlsx和file saver import as X
  • 不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事...

    文章授权转载自视觉志 版权归原作者所有 作者 不一 2009年 19岁的孙玲和朋友一起 坐上了前往深圳的绿皮火车 经过14个小时的疲倦车程 她有了一个全新的身份 工厂车间 流水线上的一名女工 那个时候 如果有人告诉孙玲 你以后会成为一名优秀
  • 无限创建gmail邮箱账号

    文章目录 说明 准备工作 操作方法 1 用户名之间加 2 用户名后面加 3 把后缀变为http googlemail com 说明 国外很多网站都需要gmail邮箱注册 如果能有很多gmail账号 那么就能做很多事 自己体会哈 注册地址 h
  • Python 模块与包

    1 模块 一个模块就是一个包含python代码的文件 后缀名称是 py就可以 模块就是个python文件 为什么我们用模块 程序太大 编写维护非常不方便 需要拆分 模块可以增加代码重复利用的方法 当作命名空间使用 避免命名冲突 如何定义模块
  • Bluetooth(HC)与STM32的连接通讯(在手机端通过蓝牙控制STM32板子小灯)

    一 说明 写本文的目的是抛弃一些比较专业的描述 从一些刚接触的小白角度出发 帮助此类朋友解决一些问题 所以内容都是用比较通俗的白话来写 网上已经有许多的比较专业的描述教程 若你想要一些比较专业性的描述 本人建议你看其他朋友的 二 概论 本文
  • 云孚科技助力第三届中国情感计算大会(CCAC 2023)胜利召开

    中国情感计算大会CCAC 2023年6月30日 7月2日 由中国中文信息学会情感计算专委会主办 西安交通大学承办的第三届中国情感计算大会 The Third Chinese Conference on Affective Computing
  • 与大家讨论如何用opencore amr在iOS上decode(已解决)

    两周前空闲的时候编译了opencore for iOS 如何编译的请参看这一篇文章 今天又有空 所以就试着去用了一下这个库 我想把 amr的文件decode为 wav格式的 在test目录下有简单的例子 教大家如何用这个库 于是我就照着里面
  • 解决 ifconfig: command not found

    apt get install net tools
  • Swing简单的文件上传

    package com iss iaf codemanagement import javax swing JOptionPane 代码管理应用程序 项目的入口 author xinzhangah data 2016 12 02 publi
  • 区块链能否推进教育行业的发展?

    随着互联网时代的到来 现在教育行业的教学模式 已经脱离了原先的黑板板书以及书本就读 信息的传播化将传统的教育行业带入了快速接受信息的时代 而不管是网上选课还是课程的在线直播 都是要通过第三方的平台才可以获取这些信息的 但是在方便人们学习的时
  • Distributed System Transaction —— 2PL

    文章目录 2PL 并发控制常见的方式有2PL MVCC等方式 2PL 两阶段锁 two phase locking 是用来解决多线程之间的竞态条件的 其算法非常简单 数据库中的每一个数据对象都有两种锁 S hared lock 和 e X
  • 移动端表格组件

    最近在vue开发移动端过程中 需要用到表格展示 经过多方面对比感觉这个不错 https www csdn net tags Mtjacg4sOTk1NDctYmxvZwO0O0OO0O0O htmlhttps www csdn net ta
  • 软件测试系统学习流程和常见面试题

    在学习软件测试的时候你是否会感觉到不知从何下手 今天教导你们软件测试学习的系统流程和面试常见的问题 学习流程 一 必备技能 1 编程基础 能看懂前端页面 掌握一门语言 php python java等 2 数据库知识 建议准备好sql语言
  • 自然语言处理: 第七章GPT的搭建

    自然语言处理 第七章GPT的搭建 理论基础 在以transformer架构为框架的大模型遍地开花后 大模型的方向基本分成了三类分别是 decoder only架构 其中以GPT系列为代表 encoder only架构 其中以BERT系列为代
  • QT---UI的使用

    目录 一 UI的介绍 二 UI的使用 一 UI的介绍 UI的使用是指通过拖拽控件来绘制界面 二 UI的使用
  • Java设计模式——外观模式

    文章目录 外观模式 外观模式 外观模式是为了解决类与类之家的依赖关系的 像spring一样 可以将类和类之间的关系配置到配置文件中 而外观模式就是将他们的关系放在一个Facade类中 降低了类类之间的耦合度 该模式中没有涉及到接口 看下类图