vs做网站,优对 网站开发,企业网站托管费用,上海app搭建策略模式是一种行为设计模式#xff0c;它定义了一系列算法#xff0c;将每个算法封装成一个对象#xff0c;并使它们可以互换。策略模式使得算法的变化可以独立于使用算法的客户端。在策略模式中#xff0c;有三个核心角色#xff1a;策略接口#xff08;Strategy#… 策略模式是一种行为设计模式它定义了一系列算法将每个算法封装成一个对象并使它们可以互换。策略模式使得算法的变化可以独立于使用算法的客户端。在策略模式中有三个核心角色策略接口Strategy、具体策略ConcreteStrategy、以及上下文Context。① 策略接口Strategy定义了一个算法族的接口。② 具体策略ConcreteStrategy实现了策略接口封装了具体的算法实现。③ 上下文Context维护一个对策略对象的引用负责将客户端请求委托给具体的策略对象。策略模式的核心思想是将算法的定义与使用分离使得算法可以独立于客户端进行变化、扩展和替换。
1、场景设计
实现场景设计A、B两种策略同一个客户端可以根据需要从两种策略中选择使用。
2、C实现
Strategy 是策略接口定义了一个纯虚的 execute() 方法。ConcreteStrategyA 和 ConcreteStrategyB 是具体策略分别实现了 execute() 方法来执行具体的算法。Context 是上下文持有一个策略对象的指针并且负责将客户端的请求委托给具体的策略对象。在 main() 函数中我们创建了两个具体策略对象然后通过 Context 对象执行了这些策略。
#include iostream// 策略接口
class Strategy {public:virtual void execute() 0;
};// 具体策略A
class ConcreteStrategyA : public Strategy {public:void execute() override {std::cout Executing strategy A std::endl;}
};// 具体策略B
class ConcreteStrategyB : public Strategy {public:void execute() override {std::cout Executing strategy B std::endl;}
};// 上下文
class Context {private:Strategy *strategy;public:Context(Strategy *strat) : strategy(strat) {}void setStrategy(Strategy *strat) {strategy strat;}void executeStrategy() {if (strategy) {strategy-execute();}}
};int main() {ConcreteStrategyA strategyA;ConcreteStrategyB strategyB;Context context(strategyA);context.executeStrategy();context.setStrategy(strategyB);context.executeStrategy();return 0;
}3、Java实现
Strategy 是策略接口定义了一个执行算法的方法 execute()。ConcreteStrategyA 和 ConcreteStrategyB 是具体策略分别实现了 execute() 方法来执行具体的算法。Context 是上下文维护一个对策略对象的引用并且负责将客户端的请求委托给具体的策略对象。在 main() 方法中我们创建了上下文对象并分别设置了两种不同的策略然后执行策略。
package behavioralpattern.strategy;public class StrategyDemo {// 策略接口interface Strategy {void execute();}// 具体策略Astatic class ConcreteStrategyA implements Strategy {Overridepublic void execute() {System.out.println(Executing strategy A);}}// 具体策略Bstatic class ConcreteStrategyB implements Strategy {Overridepublic void execute() {System.out.println(Executing strategy B);}}// 上下文static class Context {private Strategy strategy;public void setStrategy(Strategy strategy) {this.strategy strategy;}public void executeStrategy() {strategy.execute();}}public static void main(String[] args) {Context context new Context();Strategy strategyA new ConcreteStrategyA();Strategy strategyB new ConcreteStrategyB();context.setStrategy(strategyA);context.executeStrategy();context.setStrategy(strategyB);context.executeStrategy();}
}