# Java设计模式——策略模式——方法多样 调度灵活

+关注继续查看

1. 何为策略

2. 举个栗子

2.1 抽象策略

package org.demo.strategy;

/**

* @theme 加密策略接口

* @author maoge

* @date 2019-12-10

*/

public interface IEncryptStrategy {

/**

* 对一个数字进行加密

*/

public double encrypt(double input);

}

2.2 具体策略

package org.demo.strategy;

/**

* @theme 加法加密策略

* @author maoge

* @date 2019-12-10

*/

public class AddEncryptStrategy implements IEncryptStrategy {

/**

* 将原来的值先+1，再加3，再+2，如此复杂的加密算法，一般人想不到哈

*/

@Override

public double encrypt(double input) {

return input + 1 + 3 + 2;

}

}

package org.demo.strategy;

/**

* @theme 乘法加密策略

* @author maoge

* @date 2019-12-10

*/

public class MultiplyEncryptStrategy implements IEncryptStrategy {

/**

* 乘法加密——为高端加密算法代言

*/

@Override

public double encrypt(double input) {

return input * 10;

}

}

2.3 调用环境

package org.demo.strategy;

/**

* @theme 加密算法上下文环境

* @author maoge

* @date 2019-12-10

*/

public class EncryptContext {

/**

* 可保存任意策略

*/

private IEncryptStrategy strategy;

public EncryptContext(IEncryptStrategy strategy) {

this.strategy = strategy;

}

/**

* 调用保存的策略

*/

public double encrypt(double input) {

return strategy.encrypt(input);

}

}

2.4 调用示例

package org.demo.strategy;

/**

* 常规调用实例

*/

public class NormalUseStrategy {

public static void main(String[] args) {

EncryptContext context = new EncryptContext(new AddEncryptStrategy());

System.out.println("加法策略：" + context.encrypt(1));

context = new EncryptContext(new MultiplyEncryptStrategy());

System.out.println("乘法策略：" + context.encrypt(1));

}

}

2.5 借助枚举与工厂模式规范调用

package org.demo.strategy;

public enum EncryptStrategyEnum {

}

package org.demo.strategy;

/**

* @theme 加密算法上下文环境

* @author maoge

* @date 2019-12-10

*/

public class EncryptContext {

/**

* 可保存任意策略

*/

private IEncryptStrategy strategy;

/**

* 根据枚举生成策略

*/

public EncryptContext(EncryptStrategyEnum encryptStrategyEnum) {

} else {

strategy = new MultiplyEncryptStrategy();

}

}

/**

* 调用保存的策略

*/

public double encrypt(double input) {

return strategy.encrypt(input);

}

}

package org.demo.strategy;

/**

* 调用实例

*/

public class Demo {

public static void main(String[] args) {

System.out.println("加法策略：" + context.encrypt(1));

context = new EncryptContext(EncryptStrategyEnum.MULTIPLY);

System.out.println("乘法策略：" + context.encrypt(1));

}

}

915 0

743 0

821 0
java性能优化策略
· 当进行过多的字符串操作以避免不必要地创建那些最终必须经历垃圾收集的对象时，可使用 StringBuffer 功能而不是字符串并置。
656 0
WPF在在设计模式，使用动态样式

1004 0

614 0
【Java 并发编程】线程池机制 ( 线程池阻塞队列 | 线程池拒绝策略 | 使用 ThreadPoolExecutor 自定义线程池参数 )
【Java 并发编程】线程池机制 ( 线程池阻塞队列 | 线程池拒绝策略 | 使用 ThreadPoolExecutor 自定义线程池参数 )
42 0

打开百度，搜索“策略”二字，她给你这样的答案：a、可以实现目标的方案集合；b、根据形势发展而制定的行动方针和斗争方法；c、 有斗争艺术，能注意方式方法；d、 计谋，谋略。
793 0

上篇文章介绍了JVM内存模型的相关知识，其实还有些内容可以更深入的介绍下，比如运行时常量池的动态插入，直接内存等，后期抽空再完善下上篇博客，今天来介绍下JVM中的一些垃圾回收策略。        一、finailize()方法                           在介绍GC策略前，先介绍下GC中的finailize方法。
5657 0

15 0
+关注

591

0

JS零基础入门教程（上册）