Java 设计模式面试题

设计模式是在软件开发中用于解决特定问题的经验总结,是一种可重用的解决方案,可帮助开发人员更有效地编写可维护和可扩展的代码。在面试过程中,设计模式经常是被问及的重要主题之一。本文将介绍几种常见的设计模式面试题,并给出相应的代码示例。

单例模式

单例模式保证一个类只有一个实例,并提供一个全局访问点。在面试中,常常会被问到如何实现单例模式。以下是一个简单的单例模式的实现:

public class Singleton {
    private static Singleton instance;

    private Singleton() { }

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

工厂模式

工厂模式用于创建对象,将对象的创建和使用分离。在面试中,常常会被问到如何实现工厂模式。以下是一个简单的工厂模式的示例:

public abstract class Animal {
    public abstract void sound();
}

public class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("汪汪");
    }
}

public class Cat extends Animal {
    @Override
    public void sound() {
        System.out.println("喵喵");
    }
}

public class AnimalFactory {
    public static Animal createAnimal(String type) {
        if (type.equals("dog")) {
            return new Dog();
        } else if (type.equals("cat")) {
            return new Cat();
        }
        return null;
    }
}

观察者模式

观察者模式用于在对象之间建立一种一对多的依赖关系,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。以下是一个简单的观察者模式的示例:

import java.util.ArrayList;
import java.util.List;

public interface Observer {
    void update(String message);
}

public class Subject {
    private List<Observer> observers = new ArrayList<>();

    public void addObserver(Observer observer) {
        observers.add(observer);
    }

    public void removeObserver(Observer observer) {
        observers.remove(observer);
    }

    public void notifyObservers(String message) {
        for (Observer observer : observers) {
            observer.update(message);
        }
    }
}

public class ConcreteObserver implements Observer {
    private String name;

    public ConcreteObserver(String name) {
        this.name = name;
    }

    @Override
    public void update(String message) {
        System.out.println(name + " received a message: " + message);
    }
}

结论

以上是几种常见的设计模式面试题的示例代码。在面试中,对于设计模式的理解和实现能力将会是一个重要的考察点。通过了解和掌握各种设计模式的原理和实现方式,能够帮助我们更好地应对面试中的相关问题,并在实际的开发过程中写出更高质量、可维护和可扩展的代码。

参考资料:

  • [Java 设计模式(Design Patterns)](
  • [Java 设计模式面试题](