java计划模式口试题3道

[复制链接]
发表于 2025-10-12 07:45:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
口试题1:单例模式

标题:请简述单例模式的实现方式,并阐明线程安全的单例模式应该怎样实现。
观察点

  • 对单例模式根本概念的明白。
  • 对线程安全题目的处理惩罚本事。
  • 认识Java语言的特性,如静态变量、静态代码块、构造函数等。
参考答案
单例模式是一种创建型计划模式,它确保一个类只有一个实例,并提供一个全局访问点。常见的单例模式实现方式包罗懒汉式、饿汉式、双重校验锁(DCL)和摆列实现。

  • 懒汉式:在第一次利用时才初始化实例,但这种实现方式在多线程环境下大概会产生多个实例。
  • 饿汉式:在类加载时就初始化实例,包管了线程安全,但无法实现懒加载。
  • 双重校验锁(DCL):联合了懒汉式和线程安全的长处,通过双重校验锁的方式确保线程安全。代码示比方下:
    1. public class Singleton {
    2.     private static volatile Singleton instance = null;
    3.     private Singleton() {}
    4.     public static Singleton getInstance() {
    5.         if (instance == null) {
    6.             synchronized (Singleton.class) {
    7.                 if (instance == null) {
    8.                     instance = new Singleton();
    9.                 }
    10.             }
    11.         }
    12.         return instance;
    13.     }
    14. }
    复制代码
  • 摆列实现:利用Java摆列的特性实现单例,天然线程安全且防止反序列化粉碎单例。
    1. public enum Singleton {
    2.     INSTANCE;
    3.     public void doSomething() {
    4.         // 实现业务逻辑
    5.     }
    6. }
    复制代码
拓展题目

  • 怎样防止单例被反射粉碎?
  • 怎样防止单例在反序列化时被粉碎?
口试题2:工厂模式

标题:请简述工厂模式的种类及其应用场景,并用Java代码实现一个简朴的产物工厂。
观察点

  • 对工厂模式(简朴工厂、工厂方法、抽象工厂)的明白。
  • 对计划模式的机动应用本事。
  • 编码本事。
参考答案
工厂模式是一种创建型计划模式,用于封装对象的创建逻辑。它有以下几种范例:

  • 简朴工厂:通过一个工厂类来创建对象,但不符合开闭原则。
  • 工厂方法:界说了一个创建对象的接口,由子类决定实例化哪一个类。
  • 抽象工厂:创建相干或依靠对象的眷属,而不需明白指定具体类。
简朴工厂实现示例
  1. // 产品接口
  2. interface Product {
  3.     void show();
  4. }
  5. // 具体产品A
  6. class ProductA implements Product {
  7.     @Override
  8.     public void show() {
  9.         System.out.println("Product A");
  10.     }
  11. }
  12. // 具体产品B
  13. class ProductB implements Product {
  14.     @Override
  15.     public void show() {
  16.         System.out.println("Product B");
  17.     }
  18. }
  19. // 工厂类
  20. class ProductFactory {
  21.     public static Product createProduct(String type) {
  22.         if ("A".equals(type)) {
  23.             return new ProductA();
  24.         } else if ("B".equals(type)) {
  25.             return new ProductB();
  26.         }
  27.         return null;
  28.     }
  29. }
  30. // 客户端代码
  31. public class Client {
  32.     public static void main(String[] args) {
  33.         Product product = ProductFactory.createProduct("A");
  34.         product.show();
  35.     }
  36. }
复制代码
拓展题目

  • 简朴工厂和工厂方法的区别是什么?
  • 抽象工厂模式的优缺点是什么?
口试题3:观察者模式

标题:请简述观察者模式的原理,并用Java代码实现一个简朴的观察者模式示例。
观察点

  • 对观察者模式的明白。
  • 对Java语言中接口和回调机制的把握。
  • 编码本事。
参考答案
观察者模式是一种活动型计划模式,界说了对象间的一种一对多的依靠关系,当一个对象(被观察者)改变时,全部依靠于它的对象(观察者)都会得到关照并自动更新。
实现示例
  1. // 观察者接口
  2. interface Observer {
  3.     void update(String message);
  4. }
  5. // 被观察者接口
  6. interface Subject {
  7.     void register(Observer obj);
  8.     void unregister(Observer obj);
  9.     void notifyObservers();
  10. }
  11. // 具体被观察者
  12. class ConcreteSubject implements Subject {
  13.     private List<Observer> observers = new ArrayList<>();
  14.     private String message;
  15.     @Override
  16.     public void register(Observer obj) {
  17.         observers.add(obj);
  18.     }
  19.     @Override
  20.     public void unregister(Observer obj) {
  21.         observers.remove(obj);
  22.     }
  23.     @Override
  24.     public void notifyObservers() {
  25.         for (Observer obj : observers) {
  26.             obj.update(message);
  27.         }
  28.     }
  29.     public void setMessage(String message) {
  30.         this.message = message;
  31.         notifyObservers();
  32.     }
  33. }
  34. // 具体观察者
  35. class ConcreteObserver implements Observer {
  36.     private String name;
  37.     public ConcreteObserver(String name) {
  38.         this.name = name;
  39.     }
  40.     @Override
  41.     public void update(String message) {
  42.         System.out.println(name + " received message: " + message);
  43.     }
  44. }
  45. // 客户端代码
  46. public class Client {
  47.     public static void main(String[] args) {
  48.         ConcreteSubject subject = new ConcreteSubject();
  49.         Observer observer1 = new ConcreteObserver("Observer 1");
  50.         Observer observer2 = new ConcreteObserver("Observer 2");
  51.         subject.register(observer1);
  52.         subject.register(observer2);
  53.         subject.setMessage("Hello, Observers!");
  54.         subject.unregister(observer1);
  55.         subject.setMessage("Hello again!");
  56.     }
  57. }
复制代码
拓展题目

  • 观察者模式在Java中的应用实例是什么(如变乱监听机制)?
  • 怎样优化观察者模式以制止内存走漏?

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表