设计模式:(行为型)策略模式
策略模式原理
策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时根据不同的情况选择不同的算法或行为。
策略模式的核心思想是将算法封装成独立的策略类,使得它们可以相互替换,而不影响客户端的使用。客户端通过使用一个共同的接口来调用具体的策略类,从而实现了算法的动态切换。
策略模式包含以下几个角色:
1. 环境类(Context):环境类持有一个策略对象的引用,它将客户端的请求委派给策略对象进行处理。
2. 抽象策略类(Strategy):抽象策略类定义了一个公共接口,用于所有具体策略类的统一调用。
3. 具体策略类(Concrete Strategy):具体策略类实现了抽象策略类定义的接口,提供了具体的算法实现。
策略模式的优点包括:
1. 算法可以独立于客户端而变化,客户端可以根据需要选择不同的策略。
2. 策略类之间可以相互替换,增加新的策略也比较方便。
3. 可以避免使用大量的条件语句来判断不同的情况,提高代码的可读性和可维护性。
策略模式适用于以下场景:
1. 有多个类似的算法,需要动态选择其中一个时。
2. 需要在运行时根据不同的情况切换算法时。
3. 部分算法需要频繁变动或者扩展时。
总结起来,策略模式通过将算法封装成独立的策略类,使得算法可以相互替换,客户端可以根据需要选择不同的策略。这样可以提高代码的灵活性和可维护性,同时也符合面向对象设计的原则。
demo
|
|
代码中定义了一个策略接口(Strategy),具体的策略类(ConcreteStrategyA和ConcreteStrategyB)实现了该接口的Execute方法。环境类(Context)包含一个策略接口类型的成员变量strategy,通过SetStrategy方法设置具体的策略对象,并通过ExecuteStrategy方法执行策略。
在主函数中,创建了具体的策略对象strategyA和strategyB,以及环境对象context。通过调用context的SetStrategy方法设置策略对象,然后调用ExecuteStrategy方法执行策略。输出结果为: 执行策略A 执行策略B
这个示例展示了策略模式的基本结构和使用方法。通过使用策略模式,我们可以将算法的实现与调用者解耦,使得算法可以独立于调用者而变化。同时,我们也可以动态地改变策略,提高代码的灵活性和可扩展性。