面试题答案
一键面试- 策略模式简介:
- 策略模式定义了一系列算法,将每个算法封装起来,使它们可以相互替换,让算法的变化独立于使用算法的客户。在Rust中,可以通过
trait
和结构体来实现策略模式。
- 策略模式定义了一系列算法,将每个算法封装起来,使它们可以相互替换,让算法的变化独立于使用算法的客户。在Rust中,可以通过
- 示例代码:
// 定义一个trait,作为策略的抽象
trait Strategy {
fn execute(&self, a: i32, b: i32) -> i32;
}
// 第一个策略实现:加法
struct AddStrategy;
impl Strategy for AddStrategy {
fn execute(&self, a: i32, b: i32) -> i32 {
a + b
}
}
// 第二个策略实现:乘法
struct MultiplyStrategy;
impl Strategy for MultiplyStrategy {
fn execute(&self, a: i32, b: i32) -> i32 {
a * b
}
}
// 上下文结构体,持有一个策略的引用
struct Context<'a> {
strategy: &'a dyn Strategy,
}
impl<'a> Context<'a> {
fn new(strategy: &'a dyn Strategy) -> Self {
Context { strategy }
}
fn execute_strategy(&self, a: i32, b: i32) -> i32 {
self.strategy.execute(a, b)
}
}
fn main() {
let add_strategy = AddStrategy;
let multiply_strategy = MultiplyStrategy;
// 使用加法策略
let context = Context::new(&add_strategy);
let result1 = context.execute_strategy(3, 4);
println!("Addition result: {}", result1);
// 切换到乘法策略
let context = Context::new(&multiply_strategy);
let result2 = context.execute_strategy(3, 4);
println!("Multiplication result: {}", result2);
}
上述代码中:
- 首先定义了
Strategy
trait,它有一个execute
方法,这是所有具体策略都要实现的方法。 AddStrategy
和MultiplyStrategy
结构体分别实现了Strategy
trait,提供了不同的算法实现。Context
结构体持有一个指向实现了Strategy
trait的对象的引用,并提供了execute_strategy
方法来执行当前的策略。- 在
main
函数中,创建了不同策略的实例,并通过Context
结构体在运行时切换并执行不同的策略。