java设计模式面试题和答案
设计模式是软件开发中的一种经典解决方案,它提供了一套可复用的设计思想和设计理念,可以帮助软件开发人员更高效地解决各种常见的问题。在Java开发中,熟悉常见的设计模式是面试中的必备知识。本文将介绍几个常见的Java设计模式面试题和答案,帮助读者准备面试时更好地回答这些问题。
java中常用的设计模式有哪些
一、单例模式
单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点。以下是一个常见的单例模式的实现示例:
```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;
    }
}
```
这是一个使用双重检查锁定实现的线程安全的懒汉式单例模式。在面试中可能会被问到如何实现线程安全的单例模式,你可以回答使用双重检查锁定。
二、工厂模式
工厂模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定要实例化的类是哪一个。以下是一个简单的工厂模式的示例:
```java
public interface Shape {
    void draw();
}
public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing ");
    }
}
public class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing ");
    }
}
public class ShapeFactory {
    public Shape createShape(String shapeType) {
        if (shapeType.equalsIgnoreCase("rectangle")) {
            return new Rectangle();
        } else if (shapeType.equalsIgnoreCase("square")) {
            return new Square();
        }
        return null;
    }
}
```
在面试中可能会被问到如何使用工厂模式创建对象,你可以回答通过定义一个工厂类来决定对象的实例化方式。
三、观察者模式
观察者模式是一种行为型设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,其依赖的对象都会收到通知并自动更新。以下是一个简单的观察者模式的示例:
```java
import java.util.ArrayList;
import java.util.List;
public interface Observer {
    void update(String 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 message: " + message);
    }
}
public interface Subject {
    void attach(Observer observer);
    void detach(Observer observer);
    void notifyObservers(String message);
}
public class ConcreteSubject implements Subject {
    private List<Observer> observers = new ArrayList<>();
    @Override
    public void attach(Observer observer) {
        observers.add(observer);
    }
    @Override
    public void detach(Observer observer) {
        ve(observer);
    }
    @Override
    public void notifyObservers(String message) {
        for (Observer observer : observers) {
            observer.update(message);
        }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。