博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式——策略模式
阅读量:6412 次
发布时间:2019-06-23

本文共 1647 字,大约阅读时间需要 5 分钟。

什么时候使用:

有很多算法,都是为了做一件事,使用相同的数据源,通过这些不同的算法,得到相同或者不同的结果。

例如对一组数据进行排序,提供了快排、冒泡、直接排序等算法,然后根据需要动态的选择其中的一种。

关键:

将算法封装成一个一个的类,任意地替换。有一个Context类,可以动态的配置使用的策略(Strategy)。

代码:

创建策略接口:Strategy.java

public interface Strategy {   public int doOperation(int num1, int num2);}

创建实现接口的实体类:

OperationAdd.java

public class OperationAdd implements Strategy{   @Override   public int doOperation(int num1, int num2) {      return num1 + num2;   }}

OperationSubstract.java

public class OperationSubstract implements Strategy{   @Override   public int doOperation(int num1, int num2) {      return num1 - num2;   }}

OperationMultiply.java

public class OperationMultiply implements Strategy{   @Override   public int doOperation(int num1, int num2) {      return num1 * num2;   }}

创建Context类:Context.java

public class Context {   private Strategy strategy;   public Context(Strategy strategy){      this.strategy = strategy;   }   public int executeStrategy(int num1, int num2){      return strategy.doOperation(num1, num2);   }}

Context类体现了,策略作为一个对象动态的传入,而导致不同的行为。

运行demo:

StrategyPatternDemo.java

public class StrategyPatternDemo {   public static void main(String[] args) {      Context context = new Context(new OperationAdd());              System.out.println("10 + 5 = " + context.executeStrategy(10, 5));      context = new Context(new OperationSubstract());              System.out.println("10 - 5 = " + context.executeStrategy(10, 5));      context = new Context(new OperationMultiply());              System.out.println("10 * 5 = " + context.executeStrategy(10, 5));   }}

输出:

10 + 5 = 1510 - 5 = 510 * 5 = 50

 

转载于:https://www.cnblogs.com/zhang-chi/p/5938125.html

你可能感兴趣的文章
XML解析之DOM4J
查看>>
图解微服务架构演进
查看>>
SQL PATINDEX 详解
查看>>
一些常用的网络命令
查看>>
CSP -- 运营商内容劫持(广告)的终结者
查看>>
DIV+CSS命名规范有助于SEO
查看>>
Spring事务
查看>>
spring-data jpa自定义dao
查看>>
Sigar之python的基本使用
查看>>
js生成二维码
查看>>
禁止输入法联想输入表情
查看>>
VMware网卡设置
查看>>
jq 写方法,尽量使用绑定 事件的方式
查看>>
怎样使wordpress主题显示不同的侧栏?
查看>>
C指针练习
查看>>
web项目buildPath与lib的区别
查看>>
php对redis的set(集合)操作
查看>>
我的友情链接
查看>>
ifconfig:command not found的解决方法
查看>>
js使用正则表达式判断手机和固话格式
查看>>