首页 > 编程语言 >Java面试题系列 - 第9天

Java面试题系列 - 第9天

时间:2024-07-11 11:26:18浏览次数:19  
标签:面试题 系列 void float 观察者 模式 humidity Java 设计模式

题目:深入探讨Java中的设计模式及其应用场景

背景说明:设计模式是软件工程中解决问题的常见方案,它们提供了经过验证的模板,帮助开发者解决在软件设计过程中遇到的特定问题。在Java中,熟悉并正确应用设计模式能够显著提升代码的可读性、可维护性和可扩展性。

问题要求

  1. 解释设计模式的概念及其重要性。
  2. 列举并描述几种常见的设计模式,包括它们的分类。
  3. 分析每种设计模式的应用场景和优势。
  4. 提供一个具体的设计模式示例,并说明其在实际开发中的应用。

答案批注

  1. 设计模式的概念及其重要性:设计模式是一种在特定上下文中解决常见设计问题的标准化方法。它们是前辈开发者在实践中总结出来的经验教训,通过模式化的设计,可以减少代码的复杂性,提高代码的复用性和可维护性。设计模式的重要性在于,它们提供了一种通用的语言,使得开发者能够更有效地沟通和协作。

  2. 常见的设计模式分类

    • 创建型模式:关注对象的创建机制,使创建过程更加灵活。例如,单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)、原型模式(Prototype)。
    • 结构型模式:关注类或对象的组合,封装复杂的关联,简化结构。例如,适配器模式(Adapter)、装饰器模式(Decorator)、代理模式(Proxy)、桥接模式(Bridge)、组合模式(Composite)、外观模式(Facade)、享元模式(Flyweight)、代理模式(Proxy)。
    • 行为型模式:关注对象之间的责任分配,定义了算法的职责和通信。例如,策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、责任链模式(Chain of Responsibility)、备忘录模式(Memento)、解释器模式(Interpreter)、中介者模式(Mediator)、状态模式(State)。
  3. 应用场景和优势

    • 单例模式:确保一个类只有一个实例,并提供一个全局访问点,适用于需要控制资源访问的场景,如数据库连接池。
    • 工厂方法模式:定义一个创建对象的接口,让子类决定实例化哪一个类,适用于需要创建复杂对象的场景,如图形界面组件。
    • 装饰器模式:动态地给一个对象添加一些额外的职责,适用于需要扩展功能但不想修改现有代码的场景,如文本格式化。
    • 观察者模式:定义对象间的一对多依赖,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新,适用于需要实时响应状态变化的场景,如天气预报应用。
  4. 设计模式示例:观察者模式 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。当主题对象的状态发生变化时,所有观察者对象都会收到通知并自动更新。下面是一个简单的天气数据发布和订阅的例子。

     Java 

    浅色版本

    1import java.util.ArrayList;
    2import java.util.List;
    3
    4// 主题接口
    5interface Subject {
    6    void registerObserver(Observer o);
    7    void removeObserver(Observer o);
    8    void notifyObservers();
    9}
    10
    11// 观察者接口
    12interface Observer {
    13    void update(float temp, float humidity, float pressure);
    14}
    15
    16// 具体主题
    17class WeatherData implements Subject {
    18    private List<Observer> observers;
    19    private float temperature;
    20    private float humidity;
    21    private float pressure;
    22
    23    public WeatherData() {
    24        observers = new ArrayList<>();
    25    }
    26
    27    public void registerObserver(Observer o) {
    28        observers.add(o);
    29    }
    30
    31    public void removeObserver(Observer o) {
    32        observers.remove(o);
    33    }
    34
    35    public void notifyObservers() {
    36        for (Observer observer : observers) {
    37            observer.update(temperature, humidity, pressure);
    38        }
    39    }
    40
    41    public void measurementsChanged() {
    42        notifyObservers();
    43    }
    44
    45    public void setMeasurements(float temperature, float humidity, float pressure) {
    46        this.temperature = temperature;
    47        this.humidity = humidity;
    48        this.pressure = pressure;
    49        measurementsChanged();
    50    }
    51}
    52
    53// 具体观察者
    54class CurrentConditionsDisplay implements Observer {
    55    @Override
    56    public void update(float temp, float humidity, float pressure) {
    57        System.out.println("Current conditions: " + temp + "F degrees and " + humidity + "% humidity");
    58    }
    59}

    在这个例子中,WeatherData是主题,负责维护观察者列表,并在测量数据变化时通知所有观察者。CurrentConditionsDisplay是一个具体的观察者,实现update方法来显示最新的天气数据。

通过深入研究和实践设计模式,开发者可以更好地设计出可扩展、可维护和可复用的软件系统。设计模式的学习是一个持续的过程,随着经验的积累,开发者会更加熟练地应用这些模式来解决复杂的设计问题。

标签:面试题,系列,void,float,观察者,模式,humidity,Java,设计模式
From: https://blog.csdn.net/m0_67472195/article/details/140345327

相关文章

  • 最开始学java时写的文档
    一,java基础1.常用cmd窗口操作E:切换到e盘dir查看当前路径下的内容cd目录进入单级目录cd..退回到上一级目录cd目录1\目录2\进入多级目录cls清屏但不会退出当前目录exit关闭cmd窗口想要在任意目录下都可以打开指定软件可以把软件路径配置到环境变量中2.jav......
  • 初识Java
    一、java语言概述1.java是什么java是一门面向对象的编程语言,它不仅吸收了C++的各种优点,还摒弃了其难以理解的多继承、指针等概念,因此,java具有功能强大又简单易用的两个特制,作为面向对象的编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程......
  • 初学java
    Java作为一种广泛使用的高级编程语言,它以其跨平台性、面向对象设计、健壮的标准库、自动内存管理和安全性等优点而受到青睐。这些特性使得Java适用于多种计算平台,并且能够构建大型、复杂的应用程序,同时保证程序的稳定性和安全性。其也是目前使用最多的编程语言。Java有Java.ES,Ja......
  • (免费领取源码)计算机毕业设计项目:宠物店管理系统 19849(开题答辩+程序定制+全套文案 )上
    目 录摘要1绪论1.1背景及意义1.2研究现状1.3springboot框架介绍2 宠物店管理系统系统分析2.1可行性分析2.2系统流程分析2.2.1数据流程3.3.2业务流程2.3系统功能分析2.3.1功能性分析2.3.2非功能性分析2.4系统用例分析2.5本章小结......
  • 基于java+springboot+vue实现的学生网上请假系统(文末源码+Lw)104
    系统功能:本学生网上请假系统管理员,教师,学生。管理员功能有个人中心,学生管理,教师管理,班级信息管理,请假表格管理,提交请假表管理,学生考勤管理,缺课记录管理。教师功能有个人中心,学生管理,班级信息管理,请假表格管理,提交请假表管理,学生考勤管理,缺课记录管理。学生功能有班级信息管......
  • 基于java+springboot+vue实现的音乐网站(文末源码+Lw)102
    功能介绍:本音乐网站管理员功能有个人中心,用户管理,歌曲分类管理,歌曲信息管理,管理员管理,系统管理等。用户可以注册登录,试听歌曲,可以下载歌曲。因而具有一定的实用性。本站是一个B/S模式系统,采用SpringBoot框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操......
  • PowerQuery 汇总系列 - 多文件、单工作表数据
    文章目录1.唠叨几句2.从文件夹中获取Excel工作薄数据2.1.常规解法:【添加自定义列】2.2.进阶解法:修改【转换】功能生成的M公式2.3.高阶解法:一行搞定,一个查询步骤搞定多文件汇总2.4.一点细节3.版本建议4.留点问题Authors@樊笼星海@......
  • springboot基于Javaweb的项目申报系统的设计与实现
    文章目录目录文章目录论文目录项目介绍开发环境系统实现论文参考论文目录摘  要目  录第1章 绪论1.1 研究背景1.2目的和意义1.3论文研究内容第2章 程序开发技术2.1Mysql数据库2.2Java语言第3章 系统分析3.1可行性分析3.1.1技术可......
  • 【乔二参】【借助AI工具】Java零基础从入门到精通【3-1变量常量】
    视频讲解地址【乔二参】【借助AI工具】Java零基础从入门到精通变量Java变量是存储数据值的容器,它们允许程序在内存中存储和操作数据。在Java中,变量必须先声明其类型,然后才能使用。变量类型决定了变量可以存储什么类型的数据(如整数、浮点数、字符、布尔值等)以及可以对该变......
  • (免费领源码)Java/Mysql数据库+09536 SSM爱心捐赠物资维护系统,计算机毕业设计项目推荐上
    摘要随着信息技术的快速发展,计算机应用已经进入成千上万的家庭。随着物资数量的增加,物资库存管理也存在许多问题。物资数据的处理量正在迅速增加,原来的手工管理模式不适合这种形式。使用计算机可以完成数据收集、处理和分析,减少人力和物力的浪费。需要建立爱心捐赠物资维护系......