策略设计模式的定义:
策略设计模式是把每一个算法封装到具有共同接口的独立类中,具体算法之间可以相互替换或者变化,这种变化不会影响客户端。
关键词:【算法封装】 【共同接口】 【自由替换】
策略设计模式的代码:
1 public interface IStrategy { //共同接口 2 public void doSomething(); 3 } 4 class ConcreteStrategyA implements IStrategy { //具体策略A(算法) 5 public void doSomething() { //重写父类接口,实现自己的算法 6 System.out.println("具体策略A"); 7 } 8 } 9 class ConcreteStrategyB implements IStrategy { //具体策略B(算法) 10 public void doSomething() { //重写父类接口,实现自己的算法 11 System.out.println("具体策略B"); 12 } 13 } 14 class Context { //环境,拥有抽象策略引用 15 private IStrategy strategy; 16 17 public Context(IStrategy strategy){ //构造函数的参数是父类接口的引用,一会儿会指向子类对象 18 this.strategy = strategy; 19 } 20 21 public void execute(){ 22 strategy.doSomething(); //一会调用子类自己的方法(算法) 23 } 24 } 25 26 public class Client { 27 public static void main(String[] args){ 28 Context context; 29 System.out.println("-----执行策略A-----"); 30 context = new Context(new ConcreteStrategyA()); //这里就是多态,即策略设计模式的应用接口啦 31 context.execute(); 32 33 System.out.println("-----执行策略B-----"); 34 context = new Context(new ConcreteStrategyB()); 35 context.execute(); 36 } 37 }
策略设计模式的三个角色:
1. 环境context :拥有has-a 抽象策略的引用,对算法的二次封装
2. 抽象策略strategy: 是所有具体策略的父类接口,当各个实现类存在一定重复的逻辑时,可以使用抽象类,避免这种重复。
3. 具体策略: 封装了具体的算法或者行为,算法之间可以自由替换,也可以自由拓展,而不影响用户。
策略设计模式的优点:
1. 代码复用:可以把重复的算法放入抽象策略类,避免代码的重复。
2. 灵活性、扩展性: 把所有算法分离出来,自由修改、添加。
策略设计模式的缺点:
1. 开发困难:策略过多会带来开发上的麻烦。
2. 客户需要了解算法:客户必须知道每一个算法策略的具体功能,并自行决定调用哪一个算法策略。
策略设计模式的本质:
多态,即根据传入对象决定调用哪种算法,前提是用户要知道有哪些算法,以及算法的具体功能。
时间: 2024-09-29 16:10:45