Java面试题中的设计模式问题

avatar
作者
筋斗云
阅读量:0

  1. 请简要介绍单例模式的概念及其在Java中的实现方式。

单例模式是一种创建型设计模式,确保类只有一个实例,并提供一个全局访问点。在Java中,实现单例模式通常有以下几种方式:

  • 饿汉式单例:在类加载时就创建实例,线程安全,但可能造成资源浪费。
  • 懒汉式单例:在首次调用时创建实例,存在线程安全问题,需要加锁进行同步。
  • 双重检查锁单例:在懒汉式基础上加锁,提高性能。
  • 静态内部类单例:使用静态内部类实现延迟加载,线程安全。
  1. 什么是工厂模式?请给出一个在Java中实现工厂模式的例子。

工厂模式是一种创建型设计模式,用于创建对象的接口,但让子类决定实例化哪个类。在Java中,工厂模式通常包含一个接口和多个实现该接口的工厂类,示例代码如下:

// 接口 public interface Shape {     void draw(); }  // 实现类 public class Circle implements Shape {     @Override     public void draw() {         System.out.println("Circle.draw()");     } }  public class Rectangle implements Shape {     @Override     public void draw() {         System.out.println("Rectangle.draw()");     } }  // 工厂类 public class ShapeFactory {     public static Shape createShape(String shapeType) {         if (shapeType.equalsIgnoreCase("Circle")) {             return new Circle();         } else if (shapeType.equalsIgnoreCase("Rectangle")) {             return new Rectangle();         }         return null;     } }  // 使用工厂类创建对象 public class FactoryPatternDemo {     public static void main(String[] args) {         Shape circle = ShapeFactory.createShape("Circle");         Shape rectangle = ShapeFactory.createShape("Rectangle");                  circle.draw();         rectangle.draw();     } } 
  1. 什么是观察者模式?请给出一个在Java中实现观察者模式的例子。

观察者模式是一种行为设计模式,定义了一种一对多的依赖关系,当一个对象的状态发生变化时,其所有依赖者都会收到通知并自动更新。在Java中,可以使用Java内置的Observer和Observable类实现观察者模式,示例代码如下:

// 被观察者 public class Subject extends Observable {     private int state;      public int getState() {         return state;     }      public void setState(int state) {         this.state = state;         setChanged();         notifyObservers(state);     } }  // 观察者 public class Observer implements java.util.Observer {     public void update(Observable o, Object arg) {         System.out.println("State changed to: " + arg);     } }  // 使用观察者模式 public class ObserverPatternDemo {     public static void main(String[] args) {         Subject subject = new Subject();          Observer observer1 = new Observer();         Observer observer2 = new Observer();          subject.addObserver(observer1);         subject.addObserver(observer2);          subject.setState(1);         subject.setState(2);     } } 

在上述例子中,Subject类继承自Observable类,用于管理观察者列表并通知观察者状态变化;Observer类实现了java.util.Observer接口,用于接收被观察者的通知。通过使用Observer和Observable类,可以方便地实现观察者模式。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!