说说策略模式在我们生活的场景?
1 个回答
倾城倩影销魂态,如此佳人何处寻。楚华奕策略模式是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。策略模式使得算法可以在不影响客户端的情况下发生变化。 #### 生活中的策略模式实例 **场景一:出行方式选择** 假设我们要从北京去上海,可以选择不同的交通工具。每种交通工具代表一种出行策略,具体实现如下: - **飞机**:最快,但最贵。 - **高铁**:较快,价格适中。 - **自驾**:时间最长,但最灵活。 每种出行方式就是一个具体的策略,用户可以根据自己的需求选择不同的出行策略。 **场景二:支付方式选择** 在购物时,可以选择不同的支付方式,每种支付方式就是一个策略: - **信用卡支付**:快速便捷,但可能有手续费。 - **微信支付**:方便快捷,无手续费。 - **支付宝支付**:方便快捷,无手续费。 用户可以根据自己的支付习惯和优惠选择不同的支付策略。 **场景三:排序方式选择** 在购物网站上,可以按照不同的排序方式展示商品,每种排序方式就是一个策略: - **按价格排序**:从低到高或从高到低。 - **按销量排序**:从高到低。 - **按评价排序**:从高到低。 用户可以根据自己的需求选择不同的排序策略,方便找到心仪的商品。 ### 策略模式的优缺点 #### 优点 1. **遵循开闭原则**:可以自由地添加新策略而不修改客户端代码。 2. **避免多重条件语句**:通过策略的多态性,避免使用大量的条件语句。 3. **提高代码的可读性和可维护性**:将每种策略封装在独立的类中,便于理解和维护。 #### 缺点 1. **策略数量增加**:随着策略的增加,需要维护的类也会增多,对外暴露的策略类越来越多。 2. **上下文对象知道所有策略**:上下文对象需要知道所有的策略,并且负责选择合适的策略,这增加了上下文对象的复杂性。 ### 策略模式的代码示例 ```java // 策略接口 interface TravelStrategy { void travel(); } // 具体策略类:飞机 class AirplaneStrategy implements TravelStrategy { public void travel() { System.out.println("Travel by airplane."); } } // 具体策略类:高铁 class TrainStrategy implements TravelStrategy { public void travel() { System.out.println("Travel by train."); } } // 具体策略类:自驾 class CarStrategy implements TravelStrategy { public void travel() { System.out.println("Travel by car."); } } // 上下文类 class TravelContext { private TravelStrategy strategy; public void setStrategy(TravelStrategy strategy) { this.strategy = strategy; } public void executeStrategy() { strategy.travel(); } } // 测试类 public class StrategyPatternDemo { public static void main(String[] args) { TravelContext context = new TravelContext(); // 使用飞机策略 context.setStrategy(new AirplaneStrategy()); context.executeStrategy(); // 使用高铁策略 context.setStrategy(new TrainStrategy()); context.executeStrategy(); // 使用自驾策略 context.setStrategy(new CarStrategy()); context.executeStrategy(); } } ``` 通过以上代码示例,可以看出策略模式通过定义一系列可互换的策略,并在运行时动态地选择合适的策略来执行相应的操作,满足了不同需求场景下的灵活性。发布于 2024-08-06 10:59 •IP属地 黑龙江举报评论收藏
公众号进入网站体验更佳

