策略模式(Strategy):它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。
“面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类”。打一折和打九折只是形式的不同,抽象分析出来,所有的打折算法都是一样的,所以打折算法应该是一类。
Strategy类,定义所有支持的算法的公共接口。
//抽象算法类 abstract class Strategy{ //算法方法 public abstract void AlgorithmInterface(); }
ConcreteStrategy封装了具体的算法或行为,继承与Strategy
//具体算法A class ConcreteStrategyA extends Strategy{ //算法A实现方法 public void AlgorithmInterface(){ //算法A实现 } } //具体算法B class ConcreteStrategyB extends Strategy{ //算法B实现方法 public void AlgorithmInterface(){ //算法B实现 } } //具体算法C class ConcreteStrategyC extends Strategy{ //算法C实现方法 public void AlgorithmInterface(){ //算法C实现 } }
Context,用一个ConcreteStrategy来配置维护一个对Strategy对象的引用。
//上下文 class Context{ Strategy strategy; public Context(Strategy strategy){ this.strategy = strategy; } //上下文接口 public void ContextInterface(){ strategy.AlgorithmInterface(); } }
客户端代码
static void Main(String[] args){ Context context; context = new Context(new ConcreteStrategyA()); context.ContextInterface(); context = new Context(new ConcreteStrategyB()); context.ContextInterface(); context = new Context(new ConcreteStrategyC()); context.ContextInterface; }
时间: 2024-12-24 17:43:11