策略模式笔记

时间:2021-01-27 22:00:37

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();
}
}
运行结果:
 策略模式笔记

 5.策略模式优缺点

      优点:1)结构清晰明了,使用简单直观;2)耦合度相对而言较低,扩展方便;3)操作封装也更为彻底,数据更为安全。
     缺点:1)随着策略的增加,子类也会变得繁多。2). 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道所有的算法或行为的情况。