21xrx.com
2025-04-06 14:31:25 Sunday
文章检索 我的文章 写文章
Java面试必备:常问的设计模式及代码案例
2023-06-17 03:12:42 深夜i     14     0
Java面试 设计模式 代码案例

在Java面试中,设计模式是一个常见的问题。因为设计模式是一种经过实践验证的解决问题的方式,它可以使代码更加优雅,更加容易维护和扩展。本文将介绍一些Java面试中常见的设计模式,并提供一些代码案例。

1. 单例模式

单例模式是一种创建型模式,它确保一个类只有一个实例,并提供一个全局访问点。实现方式有两种,分别是饿汉式和懒汉式。以下是饿汉式的代码实现:

public class Singleton {
  private static final Singleton INSTANCE = new Singleton();
  private Singleton() {}
  public static Singleton getInstance()
    return INSTANCE;
  
}

2. 工厂模式

工厂模式是一种创建型模式,它提供了一个创建对象的接口,但是由子类决定实例化哪个类。这样可以将对象的创建与使用相分离。以下是工厂模式的代码实现:

public interface Shape {
  void draw();
}
public class Rectangle implements Shape {
  public void draw() {
    System.out.println("Inside Rectangle::draw() method.");
  }
}
public class Square implements Shape {
  public void draw() {
    System.out.println("Inside Square::draw() method.");
  }
}
public class ShapeFactory {
  public static Shape getShape(String shapeType) {
    if (shapeType == null)
      return null;
    
    if (shapeType.equalsIgnoreCase("RECTANGLE")) {
      return new Rectangle();
    } else if (shapeType.equalsIgnoreCase("SQUARE")) {
      return new Square();
    }
    return null;
  }
}

3. 观察者模式

观察者模式是一种行为型模式,它定义对象间的一种一对多的依赖关系,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。以下是观察者模式的代码实现:

public interface Observer {
  void update();
}
public class ConcreteObserver implements Observer {
  public void update() {
    System.out.println("ConcreteObserver has been notified.");
  }
}
public interface Subject {
  void attach(Observer observer);
  void detach(Observer observer);
  void notifyObservers();
}
public class ConcreteSubject implements Subject {
  private List
  observers = new ArrayList 
  
   ();
  
 
  public void attach(Observer observer) {
    observers.add(observer);
  }
  public void detach(Observer observer) {
    observers.remove(observer);
  }
  public void notifyObservers() {
    for (Observer observer : observers) {
      observer.update();
    }
  }
}

通过学习这三个常见的设计模式,可以为Java面试增加自己的竞争力。除了这三个模式以外,还有很多优秀的设计模式可以学习和应用。只有不断学习和实践,才能写出更加优秀的代码。

  
  

评论区