当前位置:实例文章 » 其他实例» [文章]面试题汇总——设计模式

面试题汇总——设计模式

发布人:shili8 发布时间:2025-03-13 07:13 阅读次数:0

**面试题汇总——设计模式**

设计模式是软件设计中经常使用的解决方案,它们提供了一种通用的、可重用且易于维护的方法来解决特定问题。以下是一些常见的设计模式及其相关面试题:

###1. 单例模式**定义:**
单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供全局访问点。

**面试题:**

*请描述一下单例模式的优缺点。
* 如何实现一个线程安全的单例模式?
* 单例模式在什么情况下使用?

**示例代码:**

javapublic class Singleton {
 // 私有构造函数,防止外部直接创建实例 private Singleton() {}

 // 静态私有变量,保存唯一实例 private static Singleton instance = null;

 // 公共方法,获取唯一实例 public static synchronized Singleton getInstance() {
 if (instance == null) {
 instance = new Singleton();
 }
 return instance;
 }
}

###2. 工厂模式**定义:**
工厂模式是一种创建型设计模式,它提供了一个用于创建对象的接口,而不需要暴露具体类。

**面试题:**

*请描述一下工厂模式的优缺点。
* 如何实现一个简单的工厂模式?
* 工厂模式在什么情况下使用?

**示例代码:**
javapublic abstract class Animal {
 public abstract void sound();
}

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

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

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

###3. 观察者模式**定义:**
观察者模式是一种行为型设计模式,它允许一个对象(被观察者)在状态变化时通知其他对象(观察者)。

**面试题:**

*请描述一下观察者模式的优缺点。
* 如何实现一个简单的观察者模式?
* 观察者模式在什么情况下使用?

**示例代码:**
javapublic interface Observer {
 void update(String message);
}

public class WeatherStation implements Observer {
 private String weather;

 public void setWeather(String weather) {
 this.weather = weather;
 notifyObservers();
 }

 @Override public void update(String message) {
 System.out.println("Received weather update: " + message);
 }
}

public class ForecastDisplay implements Observer {
 @Override public void update(String message) {
 System.out.println("Forecast updated: " + message);
 }
}

###4. 策略模式**定义:**
策略模式是一种行为型设计模式,它允许在一个类中使用多种算法或策略。

**面试题:**

*请描述一下策略模式的优缺点。
* 如何实现一个简单的策略模式?
* 策略模式在什么情况下使用?

**示例代码:**
javapublic interface PaymentStrategy {
 void pay(int amount);
}

public class CreditCardPayment implements PaymentStrategy {
 @Override public void pay(int amount) {
 System.out.println("Paid " + amount + " using credit card");
 }
}

public class PayPalPayment implements PaymentStrategy {
 @Override public void pay(int amount) {
 System.out.println("Paid " + amount + " using PayPal");
 }
}

###5. 模板方法模式**定义:**
模板方法模式是一种行为型设计模式,它允许在一个类中定义一个算法的骨架,而子类可以提供具体实现。

**面试题:**

*请描述一下模板方法模式的优缺点。
* 如何实现一个简单的模板方法模式?
* 模板方法模式在什么情况下使用?

**示例代码:**
javapublic abstract class Coffee {
 public final void make() {
 boilWater();
 brewCoffee();
 pourInCup();
 if (hasMilk()) {
 addMilk();
 }
 }

 private void boilWater() {
 System.out.println("Boiling water...");
 }

 private void brewCoffee() {
 System.out.println("Brewing coffee...");
 }

 private void pourInCup() {
 System.out.println("Pouring coffee in cup...");
 }

 protected abstract boolean hasMilk();

 protected abstract void addMilk();
}

###6. 适配器模式**定义:**
适配器模式是一种结构型设计模式,它允许两个不兼容的接口之间进行通信。

**面试题:**

*请描述一下适配器模式的优缺点。
* 如何实现一个简单的适配器模式?
* 适配器模式在什么情况下使用?

**示例代码:**
javapublic interface Duck {
 void quack();
}

public class Turkey {
 public void gobble() {
 System.out.println("Gobble!");
 }
}

public class TurkeyAdapter implements Duck {
 private Turkey turkey;

 public TurkeyAdapter(Turkey turkey) {
 this.turkey = turkey;
 }

 @Override public void quack() {
 turkey.gobble();
 }
}

###7. 装饰器模式**定义:**
装饰器模式是一种结构型设计模式,它允许动态地添加或修改一个对象的行为。

**面试题:**

*请描述一下装饰器模式的优缺点。
* 如何实现一个简单的装饰器模式?
* 装饰器模式在什么情况下使用?

**示例代码:**
javapublic interface Coffee {
 void make();
}

public class SimpleCoffee implements Coffee {
 @Override public void make() {
 System.out.println("Making simple coffee...");
 }
}

public class MilkDecorator implements Coffee {
 private Coffee coffee;

 public MilkDecorator(Coffee coffee) {
 this.coffee = coffee;
 }

 @Override public void make() {
 coffee.make();
 addMilk();
 }

 protected abstract void addMilk();
}

###8. 组合模式**定义:**
组合模式是一种结构型设计模式,它允许将对象表示为树状结构。

**面试题:**

*请描述一下组合模式的优缺点。
* 如何实现一个简单的组合模式?
* 组合模式在什么情况下使用?

**示例代码:**
javapublic interface Component {
 void operation();
}

public class Leaf implements Component {
 @Override public void operation() {
 System.out.println("Leaf operation...");
 }
}

public class Composite implements Component {
 private List children;

 public Composite() {
 this.children = new ArrayList<>();
 }

 @Override public void operation() {
 for (Component child : children) {
 child.operation();
 }
 }

 public void add(Component component) {
 children.add(component);
 }

 public void remove(Component component) {
 children.remove(component);
 }
}

###9.代理模式**定义:**
代理模式是一种结构型设计模式,它允许为一个对象提供一个替代的接口。

**面试题:**

*请描述一下代理模式的优缺点。
* 如何实现一个简单的代理模式?
*代理模式在什么情况下使用?

**示例代码:**
javapublic interface Subject {
 void request();
}

public class RealSubject implements Subject {
 @Override public void request() {
 System.out.println("Real subject request...");
 }
}

public class ProxySubject implements Subject {
 private RealSubject realSubject;

 public ProxySubject(RealSubject realSubject) {
 this.realSubject = realSubject;
 }

 @Override public void request() {
 preRequest();
 realSubject.request();
 postRequest();
 }

 protected abstract void preRequest();

 protected abstract void postRequest();
}

###10. 外观模式**定义:**
外观模式是一种结构型设计模式,它允许为一个复杂的系统提供一个简单的接口。

**面试题:**

*请描述一下外观模式的优缺点。
* 如何实现一个简单的外观模式?
* 外观模式在什么情况下使用?

**示例代码:**
javapublic interface Light {
 void on();
}

public class Bulb implements Light {
 @Override public void on() {
 System.out.println("Bulb is on...");
 }
}

public class Lamp implements Light {
 private

相关标签:设计模式
其他信息

其他资源

Top