第十二章 外观模式

news2024/10/5 17:20:20

文章目录

  • 前言
  • 一、外观模式基本介绍
    • 完整代码
    • DVD类
    • 爆米花类
    • 投影仪类
    • 屏幕类
    • 立体声类
    • 灯光类
    • 家庭影院类进行聚合
    • Client测试类
  • 二、 外观模式在MyBatis框架应用的源码分析
  • 三、外观模式的注意事项和细节


前言

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


`

一、外观模式基本介绍

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

完整代码

DVD类

package tanchishell.SJMS.facade;

//DVD类
public class DVDPlayer {
    //使用单例模式, 使用饿汉式
    private static DVDPlayer instance = new DVDPlayer();

    public static DVDPlayer getInstanc() {
        return instance;
    }

    //打开DVD
    public void on() {
        System.out.println(" 打开DVD ");
    }

    //关闭DVD
    public void off() {
        System.out.println("  关闭DVD ");
    }

    //播放DVD
    public void play() {
        System.out.println(" 播放DVD ");
    }

    //暂停DVD
    public void pause() {
        System.out.println(" 暂停DVD ..");
    }
}

爆米花类

package tanchishell.SJMS.facade;

//爆米花机
public class Popcorn {
    private static Popcorn instance = new Popcorn();
    public static Popcorn getInstance() {
        return instance;
    }
    //打开爆米花机
    public void on() {
        System.out.println(" 打开爆米花机 ");
    }
    //关闭爆米花机
    public void off() {
        System.out.println(" 关闭爆米花机 ");
    }
    //爆米花机正在工作
    public void pop() {
        System.out.println(" 爆米花机正在工作 ");
    }
}

投影仪类

package tanchishell.SJMS.facade;

//投影仪
public class Projector {
    private static Projector instance = new Projector();
    public static Projector getInstance() {
        return instance;
    }

    //打开投影仪
    public void on() {
        System.out.println(" 打开投影仪 ");
    }
    //关闭投影仪
    public void off() {
        System.out.println(" 关闭投影仪 ");

    }

    //投影仪正在工作
    public void focus() {
        System.out.println(" 投影仪正在工作 ");
    }
}

屏幕类

package tanchishell.SJMS.facade;


//屏幕类
public class Screen {

    private static Screen instance = new Screen();
    public static Screen getInstance() {
        return instance;
    }

    //升起屏幕
    public void up() {
        System.out.println(" 升起屏幕 ");
    }

    //下降屏幕
    public void down() {
        System.out.println(" 下降屏幕 ");
    }
}

立体声类

package tanchishell.SJMS.facade;


//立体声
public class Stereo {
    private static Stereo instance = new Stereo();
    public static Stereo getInstance() {
        return instance;
    }

    //打开立体声
    public void on() {
        System.out.println(" 打开立体声 ");
    }

    //关闭立体声
    public void off() {
        System.out.println(" 关闭立体声 ");
    }

}

灯光类

package tanchishell.SJMS.facade;

//灯光类
public class TheaterLight {

    private static TheaterLight instance = new TheaterLight();
    public static TheaterLight getInstance() {
        return instance;
    }
    //打开灯光
    public void on() {
        System.out.println(" 打开灯光 ");
    }

    //关闭灯光
    public void off() {
        System.out.println(" 关闭灯光 ");
    }

    //调暗灯光
    public void dim() {
        System.out.println(" 调暗灯光.. ");
    }

    //调亮灯光
    public void bright() {
        System.out.println(" 调亮灯光.. ");
    }
}

家庭影院类进行聚合

package tanchishell.SJMS.facade;


//家庭影院类进行聚合
public class HomeTheaterFacade {
    //定义各个子系统对象
    private TheaterLight theaterLight;
    private Popcorn popcorn;
    private Stereo stereo;
    private Projector projector;
    private Screen screen;
    private DVDPlayer dVDPlayer;

    //构造器获取子系统单例对象
    public HomeTheaterFacade() {
        super();
        this.theaterLight = TheaterLight.getInstance();
        this.popcorn = Popcorn.getInstance();
        this.stereo = Stereo.getInstance();
        this.projector = Projector.getInstance();
        this.screen = Screen.getInstance();
        this.dVDPlayer = DVDPlayer.getInstanc();
    }

    /**操作分成 4 步  准备 开始  暂停  结束
     *
     */

    //准备
    public void ready() {
        //打开爆米花机
        popcorn.on();
        //爆米花机正在工作
        popcorn.pop();
        //下降屏幕
        screen.down();
        //打开投影仪
        projector.on();
        //打开立体声
        stereo.on();
        //打开DVD
        dVDPlayer.on();
        //调暗灯光
        theaterLight.dim();
    }


    //开始
    public void play() {
        //播放DVD
        dVDPlayer.play();
    }

    //暂停
    public void pause() {
        //暂停DVD
        dVDPlayer.pause();
    }


    //结束
    public void end() {
        //关闭爆米花机
        popcorn.off();
        //调亮灯光
        theaterLight.bright();
        //升起屏幕
        screen.up();
        //关闭投影仪
        projector.off();
        //关闭立体声
        stereo.off();
        //关闭DVD
        dVDPlayer.off();
    }
}

Client测试类

public class Client {
    public static void main(String[] args) {
// TODO Auto-generated method stub
//这里直接调用。。 很麻烦
        HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade();
        homeTheaterFacade.ready();
        System.out.println("-------------------------");

        homeTheaterFacade.play();
        System.out.println("-------------------------");

        homeTheaterFacade.pause();
        System.out.println("-------------------------");
        homeTheaterFacade.end();

    }
}


输出

 打开爆米花机 
 爆米花机正在工作 
 下降屏幕 
 打开投影仪 
 打开立体声 
 打开DVD 
 调暗灯光.. 
-------------------------
 播放DVD 
-------------------------
 暂停DVD ..
-------------------------
 关闭爆米花机 
 调亮灯光.. 
 升起屏幕 
 关闭投影仪 
 关闭立体声 
  关闭DVD 

二、 外观模式在MyBatis框架应用的源码分析

在这里插入图片描述
在这里插入图片描述

三、外观模式的注意事项和细节

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/458006.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Layui 2.8.0 正式发布,朴实归来

Layui 是一套开源的 Web UI 组件库,采用自身轻量级模块化规范,遵循原生态的 HTML/CSS/JavaScript 开发模式,极易上手,拿来即用。其风格简约轻盈,而内在雅致丰盈,甚至包括文档在内的每一处细节都经过精心雕琢…

On the Efficacy of Knowledge Distillation 解析

paper:On the Efficacy of Knowledge Distillation 本文的题目是《论知识蒸馏的有效性》,主要是对教师模型并不是越大越好这一现象进行研究,并提出了缓解方法:early stop。 Bigger models are not better teachers 知识蒸馏背…

S32k3系列开发学习(FlexCAN)

前言 由于之前没有接触过CAN总线模块,对这一块的知识仍比较陌生,于是乎想简单梳理一下CAN总线的工作流程,加深理解。 一、CAN是什么? 参考:https://zhuanlan.zhihu.com/p/346696648 二、CAN框架 各模块功能如下&am…

NLP基础:标注器Label Studio的入门使用

目录 一、环境准备 二、操作 文章来源: 简介: Label Studio是一个开源的数据标注工具,它可以用于各种机器学习和深度学习项目。它的主要目的是帮助数据科学家和机器学习工程师快速、高效地标注数据,以构建和训练准确的机器学…

Linux入门---开发的Linux命令手册

Linux 基础知识 基础 启动过程: 内核的引导。运行 init。系统初始化。建立终端 。用户登录系统。 命令介绍 磁盘 #文件#a:相当於 -pdr 的意思,至於 pdr 请参考下列说明;(常用);f:为强制(force)进行&…

Ubuntu20.04使用多卡训练HyperNetwork模型和LoRA模型全流程及疑难问题解决方案

目录 一. LoRA模型多卡训练1.1 安装xformer等库1.2 设置路径1.3 多卡训练 二. LoRA模型多卡训练疑难报错解决方案多卡训练报错 软硬件配置: CPU: AMD 5800 8core 16Thread GPU: NVIDIA RTX 3090 *1 NVIDIA TITAN RTX *1 OS: Ubuntu20.04 一. LoRA模型多卡训练 1.1 …

JavaScript概述四(DOM文档对象模型)

1.DOM(Document Object Model) 会把网页里面的元素当成对象去操作,包含对象的属性,属性值,方便我们去 操作网页。 整个页面最终会形成一个对象 :document ,页面里面的所有的元素(如 标签 ) 最终都会转换成 js 里面的对象。 1.1 获取页面的元素(通过选择器&#xff0…

S32K3系列单片机学习

前言 定时器中断,每个平台的实现方式均有差异,从51单片机通过寄存器配置实现定时器周期计数,再到使用HAL库配置STM32的定时器,他们的实现原理都是大同小异的,只不过不同的平台使用的底层库不同,导致实现的…

公司25k招了一个测试员不会自动化,试用期没过就赶走了...

最近翻了一些网站的招聘信息,把一线大厂和大型互联网公司看了个遍,发现市场还是挺火热的,虽说铜三铁四,但是软件测试岗位并没有削减多少,建议大家有空还是多关注和多投简历,不要闭门造车,错过好…

手推FlinkML2.2(一)

Java 快速入门 # 本文档提供了一个关于如何使用Flink ML的快速入门。阅读本文档的用户将被指导提交一个简单的Flink作业,用于训练机器学习模型并提供预测服务。 求助,我卡住了!# 如果你遇到困难,请查看社区支持资源。特别是&…

第一个 Servlet 程序

1. 创建项目 使用 IDEA 创建一个 Maven 项目. 1.1、File -> New Project Name:javaservlet2 Location:选择要存放的路径 Language:Java Build system:Maven 点击Create按钮 1.2、Pom.xml引入依赖 依赖包来源&#xff1a; <dependencies> <!-- https…

【Hive实战】探索Hive 2.X以及更早版本的MetaStore

探索Hive 2.X以及更早版本的MetaStore 文章目录 探索Hive 2.X以及更早版本的MetaStore概述配置元数据服务和元数据存储库基础配置参数其他配置参数默认配置配置元服务数据库使用内嵌模式的Derby库使用远程数据存储库 配置元数据服务本地/内嵌服务配置远程服务配置 元数据服务配…

Java Collection源码分析(JDk corretto 11)

文章目录 Collection 系列源码分析 (JDK Amazon corretto 11)Collection接口Iterable接口 子接口 QueueQueue的子接口 Deque双端队列 子接口ListArrayList 实现类序列化与反序列化(后续解决)获取Calss对象的方式 主要有三种&#xff1a;Arrays工具类System类 LinkedList实现类t…

kotlin的let,with,run,apply,also,异同区别

kotlin的let&#xff0c;with&#xff0c;run&#xff0c;apply&#xff0c;also&#xff0c;异同区别 例如&#xff1a; class Person(var name: String, var age: Int) {fun eat() {println("吃饭")}fun work(hour: Int): Int {println("$name $age 工作 $ho…

【论文写作】如何写引言?应该思考什么问题?总体架构!!!

结构 大多数的科技论文都聚焦于简单地说明&#xff0c;做了什么&#xff0c;发现了什么&#xff1f;虽然这个可以帮助你写出一篇研究型论文当中的核心的东西&#xff08;方法论和结果&#xff09;&#xff0c;但是不能完全把引言的部分完成。在这篇文章当中&#xff0c;将展示…

【Python】Python学习笔记(三)条件语句

条件语句 Python中的条件语句与c/cpp基本无异。 if语句 基本结构见以下代码。 Python使用缩进控制if/else语句之间的嵌套关系。 #判断两数是否相等。a int(input(a:)) b int(input(b:))if a b:print(Same) else:print(No Same)elif 代替了cpp中“else if”的写法&#…

数据结构(顺序结构、链式结构、索引结构、散列结构)

文章目录 1.概述2.数据间逻辑关系3.数据的存储结构&#xff08;或物理结构&#xff09;3.1顺序结构3.2链式结构3.3索引结构3.4散列结构 4.运算结构 1.概述 数据结构&#xff0c;就是一种程序设计优化的方法论&#xff0c;研究数据的逻辑结构和物理结构以及它们之间相互关系&am…

STM32 DMA详解

1.DMA简介 DMA (Direct Memory Access) 直接存储器存取 DMA 可以提供外设和存储器或者存储器和存储器之间的高速数据传输&#xff0c;无须CPU干预&#xff0c;节省了CPU的资源( 比如想把Flash里的一批数据转运到SRAM里&#xff0c;需要软件触发&#xff0c;使用软件触发之后&a…

NAT网络地址转换技术入门到详解

本文目录 1、NAT简介1.1、SNAT 和IP伪装(Masquerade)1.2、DNAT1.3、Full NAT (也称为Full Cone NAT)1.4、PAT (也称为NAPT) 2、如何通过iptables将一台多网卡的主机配置成NAT路由器3、汇总 本文会从NAT的简介入手&#xff0c;详解NAT技术本身&#xff0c;通过本文&#xff0c;你…

巧用千寻位置GNSS软件| 电力线勘测如何实现?

正如大家所知&#xff0c;电力线勘测是在做电力线路设计之前对设计线路沿途自然环境进行勘察测量&#xff0c;最后把手簿测量数据在电脑端经过转换输出为电力软件专用格式数据的专用功能。 那么在千寻位置GNSS软件中该如何操作完成电力线的勘察测量呢&#xff1f; 点击【测量】…