策略模式
策略模式就是定义了一系列算法(或策略),并将每个算法封装起来,使它们可以互相替换。这种模式让算法的变化独立于使用算法的客户。
例子
想象一下你开了一家快餐店,提供三种支付方式:现金支付、信用卡支付和微信支付。顾客可以选择任何一种方式来付款。这里,支付方式就是不同的“策略”。 代码实现 策略接口:定义支付方式的接口。 具体策略:实现不同的支付方式。 上下文:使用策略的地方。
1 | // 策略接口 |
面试的时候,可以用5W1H(即What, Why, When, Where, Who, How)思维来整理一下策略模式的解释,这样你在面试时就能条理清晰地回答了。 话术 What(是什么): 策略模式是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。 Why(为什么需要它): 我们使用策略模式是为了使得算法的变化独立于使用算法的客户。这样可以提高代码的灵活性和可维护性,避免在同一地方写大量的条件判断逻辑。 When(在什么时候使用): 当我们有多种算法可以选择,并且这些算法可以在运行时互相替换时,策略模式是一个很好的选择。比如支付方式、排序算法等场景。 Where(在哪里使用): 策略模式常用于需要动态选择算法的地方,比如电商平台的不同支付方式、游戏中的不同攻击策略等。 Who(谁来使用): 策略模式的使用者通常是需要执行某种行为的对象,比如支付系统中的支付处理器,游戏中的角色等。 How(如何实现): 我们通过定义一个策略接口,然后实现多个具体的策略类,再在上下文类中使用这些策略。上下文类负责根据具体情况选择和执行策略。 综合这几个点,面试时你可以这么说: “策略模式是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。我们使用策略模式是为了提高代码的灵活性和可维护性,避免在同一地方写大量的条件判断逻辑。当我们有多种算法可以选择,并且这些算法可以在运行时互相替换时,比如在电商平台的不同支付方式或游戏中的不同攻击策略时,就可以使用策略模式。具体实现上,我们通过定义一个策略接口,然后实现多个具体的策略类,再在上下文类中使用这些策略,上下文类负责根据具体情况选择和执行策略。”