1.策略模式介绍
Strategy模式也叫策略模式是行为模式之一,它对一系列的算法加以封装,为所有算法定义一个抽象的算法接口,并通过继承该
抽象算法接口对所有的算法加以封装和实现,具体的算法选择交由客户端决定(策略)。Strategy模式主要用来平滑地处理算法切换。
2.策略模式的角色和职责
Strategy: 策略(算法)抽象 ConcreteStrategy: 各种策略(算法)的具体实现。 Context:策略的外部封装类,或者说策略容器类。根据不同策略执行不同的行为。策略由外部环境决定。
3.策略模式的使用场景
(1) 针对同一类型问题的多种处理方式,仅仅是具体行为有差别时。
(2) 需要安全地封装多种同一类型的操作时。
(3)出现同一抽象类有多个子类,而有需要使用if-else或者switch-case来选择具体子类时。
4.策略模式简单应用
public interface Strategy {
public void makeSecret();
}
package com.ljt.strategy;public class UseMD5Strategy implements Strategy {@Overridepublic void makeSecret() {System.out.println("使用MD5加密");}}
package com.ljt.strategy;
public class UseRSAStrategy implements Strategy{
@Override
public void makeSecret() {
System.out.println("使用RSA加密算法");
}
}
package com.ljt.strategy;
public class Context {
public Strategy str;
public Context(Strategy str) {
super();
this.str = str;
}
public void makeSecret(){
this.str.makeSecret();
}
}
package com.ljt.strategy;运行结果:
public class TestStrategy {
public static void main(String[] args) {
//Strategy s1=new UseMD5Strategy();
//Strategy s2=new UseRSAStrategy();
//s1.makeSecret();
//s2.makeSecret();
System.out.println("----------------------");
Context context = new Context(new UseMD5Strategy());
context.makeSecret();
}
}
![策略模式笔记 策略模式笔记](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRaeTVpYkc5bkxtTnpaRzR1Ym1WMEx6SXdNVGN3T1RBNU1UWXdOak00TmpFMVAzZGhkR1Z5YldGeWF5OHlMM1JsZUhRdllVaFNNR05FYjNaTU1rcHpZakpqZFZrelRtdGlhVFYxV2xoUmRtSkhjREJOYW1ONVRrUnJNazFFV1RKTlVUMDlMMlp2Ym5Rdk5XRTJURFZNTWxRdlptOXVkSE5wZW1Vdk5EQXdMMlpwYkd3dlNUQktRbEZyUmtOTlFUMDlMMlJwYzNOdmJIWmxMemN3TDJkeVlYWnBkSGt2UTJWdWRHVnk%3D.jpg?w=700&webp=1)
5.策略模式优缺点
优点:1)结构清晰明了,使用简单直观;2)耦合度相对而言较低,扩展方便;3)操作封装也更为彻底,数据更为安全。
缺点:1)随着策略的增加,子类也会变得繁多。2). 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道所有的算法或行为的情况。