MST

星途 面试题库

面试题:Java多态在设计模式中如何简化复杂系统的代码结构

以Java中的策略模式为例,解释多态是如何在策略模式中发挥作用,进而简化复杂系统的代码结构的。请详细说明策略模式的结构,以及多态在其中如何替代大量的条件判断语句来优化代码。
15.7万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

策略模式结构

  1. 抽象策略(Strategy):定义一个公共接口,所有具体策略类都要实现这个接口。这是策略的抽象,为具体策略类提供统一的方法定义。
  2. 具体策略(ConcreteStrategy):实现抽象策略定义的接口,提供具体的算法或行为实现。不同的具体策略类实现不同的业务逻辑。
  3. 环境(Context):持有一个抽象策略类型的引用,通过构造函数或setter方法传入具体策略对象。它提供一个方法,内部调用具体策略对象的方法,执行相应的策略。

多态在策略模式中的作用及优化代码方式

  1. 替代条件判断语句:在没有策略模式和多态时,如果系统中有多种不同的算法或行为,可能会使用大量的条件判断语句(如if - else或switch - case)来根据不同的条件选择不同的算法。例如:
if (type == 1) {
    // 执行算法1
} else if (type == 2) {
    // 执行算法2
} else {
    // 执行默认算法
}

这种方式代码冗长且不易维护,当新增一种算法时,需要修改多处条件判断代码。

  1. 策略模式结合多态优化:在策略模式中,利用多态特性,环境类(Context)只依赖抽象策略接口。通过将具体策略类实例化并传递给环境类,在运行时根据具体传入的策略对象决定执行哪种算法。例如:
// 抽象策略接口
interface Strategy {
    void execute();
}

// 具体策略类1
class ConcreteStrategy1 implements Strategy {
    @Override
    public void execute() {
        System.out.println("执行策略1");
    }
}

// 具体策略类2
class ConcreteStrategy2 implements Strategy {
    @Override
    public void execute() {
        System.out.println("执行策略2");
    }
}

// 环境类
class Context {
    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public void executeStrategy() {
        strategy.execute();
    }
}

在使用时:

// 使用具体策略1
Context context1 = new Context(new ConcreteStrategy1());
context1.executeStrategy();

// 使用具体策略2
Context context2 = new Context(new ConcreteStrategy2());
context2.executeStrategy();

通过这种方式,新增策略时只需创建新的具体策略类实现抽象策略接口,而不需要修改环境类的代码,大大简化了复杂系统的代码结构,提高了代码的可维护性和可扩展性。