Java设计模式是Java编程中非常重要的概念,它有助于提高代码的可维护性、可扩展性和可复用性。在面试中,Java设计模式相关的问题也经常被问到。本文将围绕Java设计模式面试题进行详细的解答,帮助读者更好地理解和掌握这些知识。
一、单例模式(Singleton Pattern)
1. 定义与概念
java
public class Singleton {
private static Singleton instance = new Singleton;
private Singleton {}
public static Singleton getInstance {
return instance;
2. 面试常见问题
java
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton {}
public static synchronized LazySingleton getInstance {
if (instance == null) {
instance = new LazySingleton;
return instance;
饿汉式是在类加载时就创建实例。懒汉式的优点是在不需要实例时不会创建,节省了内存空间,但需要注意线程安全问题(这里通过`synchronized`关键字解决);饿汉式的优点是线程安全,简单直接,但可能会在不需要实例时就提前创建,占用内存资源。
二、工厂模式(Factory Pattern)
1. 定义与概念
java
public class CarFactory {
public static Car createCar(String type) {
if (type.equals("sedan")) {
return new SedanCar;
} else if (type.equals("SUV")) {
return new SUVCar;
} else {
return null;
2. 面试常见问题
三、观察者模式(Observer Pattern)
1. 定义与概念
java
public interface Subject {
void registerObserver(Observer o);
void removeObserver(Observer o);
void notifyObservers;
java
public interface Observer {
void update(Subject s);
java
public class ConcreteSubject implements Subject {
private List
private int state;
@Override
public void registerObserver(Observer o) {
observers.add(o);
@Override
public void removeObserver(Observer o) {
observers.remove(o);
@Override
public void notifyObservers {
for (Observer observer : observers) {
observer.update(this);
public int getState {
return state;
public void setState(int state) {
this.state = state;
notifyObservers;
java
public class ConcreteObserver implements Observer {
private Subject subject;
private int observerState;
public ConcreteObserver(Subject subject) {
this.subject = subject;
subject.registerObserver(this);
@Override
public void update(Subject s) {
observerState = ((ConcreteSubject) s).getState;
System.out.println("Observer state updated: " + observerState);
2. 面试常见问题
四、策略模式(Strategy Pattern)
1. 定义与概念
java
public interface DiscountStrategy {
double calculateDiscount(double price);
java
public class NormalMemberDiscount implements DiscountStrategy {
@Override
public double calculateDiscount(double price) {
return price 0.9;
java
public class PremiumMemberDiscount implements DiscountStrategy {
@Override
public double calculateDiscount(double price) {
return price 0.8;
java
public class PriceCalculator {
private DiscountStrategy discountStrategy;
public PriceCalculator(DiscountStrategy discountStrategy) {
this.discountStrategy = discountStrategy;
public double calculateFinalPrice(double price) {
return discountStrategy.calculateDiscount(price);
2. 面试常见问题
五、结论
Java设计模式在Java编程中有着重要的地位,无论是在提高代码质量、可维护性还是在应对面试等方面都非常关键。单例模式有助于资源管理,工厂模式降低了代码的耦合度,观察者模式实现了对象间的一对多依赖关系,策略模式使得算法可以灵活替换。理解这些设计模式的概念、实现方式以及应用场景,能够帮助Java开发者更好地应对工作中的实际问题,同时在面试中也能展现出扎实的知识基础。在实际的学习和工作中,应该不断地深入研究和实践这些设计模式,以便能够熟练地运用它们来构建高效、可维护的Java应用程序。