当前位置: 首页 > news >正文

湛江专业官网建站电子商务网站网络安全设计方案

湛江专业官网建站,电子商务网站网络安全设计方案,网站建设怎么分类,wordpress动画插件文章目录 一、策略模式1.1 策略模式的定义1.2 策略模式的参与者1.3 策略模式的优点1.4 策略模式的缺点1.5 策略模式的使用场景 二、策略模式简单实现2.1 案例描述2.2 实现代码 三、策略模式的代码优化3.1 优化思路3.2 抽象策略接口3.3 上下文3.4 具体策略实现类3.5 测试 参考资…

文章目录

    • 一、策略模式
      • 1.1 策略模式的定义
      • 1.2 策略模式的参与者
      • 1.3 策略模式的优点
      • 1.4 策略模式的缺点
      • 1.5 策略模式的使用场景
    • 二、策略模式简单实现
      • 2.1 案例描述
      • 2.2 实现代码
    • 三、策略模式的代码优化
      • 3.1 优化思路
      • 3.2 抽象策略接口
      • 3.3 上下文
      • 3.4 具体策略实现类
      • 3.5 测试
    • 参考资料

完整案例代码:java-demos/design-pattern-demos/strategy-pattern at main · idealzouhu/java-demos

一、策略模式

1.1 策略模式的定义

策略模式(Strategy Pattern)定义如下:

Define a family of algorithms,encapsulate each one,and make them interchangeable.(定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。)

1.2 策略模式的参与者

策略模式的参与者主要有:

  • Context(上下文类):它持有一个 Strategy 对象,用于调用具体策略的方法。客户端通常只需要与 Context 交互,而不直接接触具体的策略实现
  • Strategy(策略接口):定义了算法的通用接口,所有具体策略都实现这个接口。
  • ConcreteStrategy(具体策略类):实现 Strategy 接口的具体算法类,不同的策略类提供不同的算法实现。

1.3 策略模式的优点

  • 避免使用多重条件判断:策略模式可以取代if-elseswitch-case的条件分支。

1.4 策略模式的缺点

  • 策略数量可能会增多:如果策略太多,会增加类的数量,维护成本上升。如果 if-else 判断分支不多并且是固定的,那就使用策略模式即可。

1.5 策略模式的使用场景

  • 算法/行为自由切换: 比如支付系统中,可以通过策略模式动态选择不同的支付方式(微信支付、支付宝支付、信用卡支付等)。
  • 屏蔽算法底层细节:只用知道算法名字即可

二、策略模式简单实现

2.1 案例描述

假设我们有一个系统,它可以根据不同的需求选择不同的排序算法,比如快速排序、冒泡排序、归并排序等。通过策略模式,我们可以将这些不同的算法作为策略类进行实现。

2.2 实现代码

// 策略接口
interface SortStrategy {void sort(int[] array);
}// 具体策略类:快速排序
class QuickSortStrategy implements SortStrategy {@Overridepublic void sort(int[] array) {// 快速排序算法实现System.out.println("Using Quick Sort");// 排序逻辑}
}// 具体策略类:冒泡排序
class BubbleSortStrategy implements SortStrategy {@Overridepublic void sort(int[] array) {// 冒泡排序算法实现System.out.println("Using Bubble Sort");// 排序逻辑}
}// 上下文类:负责使用策略
class SortingContext {private SortStrategy strategy;// 设置策略public void setStrategy(SortStrategy strategy) {this.strategy = strategy;}// 执行排序public void executeSort(int[] array) {strategy.sort(array);}
}// 测试
public class StrategyPatternExample {public static void main(String[] args) {SortingContext context = new SortingContext();// 使用快速排序策略context.setStrategy(new QuickSortStrategy());context.executeSort(new int[]{3, 1, 2});// 使用冒泡排序策略context.setStrategy(new BubbleSortStrategy());context.executeSort(new int[]{3, 1, 2});}
}

三、策略模式的代码优化

3.1 优化思路

优化思路为使用 @Component 修饰具体策略类,从而让 Spring 提供的 IoC 容器自动添加策略类,从而实现开闭原则。

注意事项,如果你的策略实现类被初始化的时间晚于 onApplicationEvent 方法的调用,可能会导致在注册策略时未能找到这些策略。确保所有策略组件在 onApplicationEvent 被调用之前已经被创建和注册。

3.2 抽象策略接口

AbstractExecuteStrategy 定义了一个策略执行的基本框架,供具体策略类实现。主要方法有:

  • mark():默认返回策略标识的字符串,可以被具体策略类重写以返回唯一标识。
  • patternMatchMark():用于模式匹配的标识,允许根据一定模式选择策略。
  • execute(REQUEST requestParam):执行策略的方法,接受一个请求参数,默认实现为空,具体策略类可以重写。
  • executeResp(REQUEST requestParam):执行策略并返回结果的方法,接受请求参数并返回响应,默认实现返回null,具体策略类可以重写。
/*** 策略执行抽象接口**/
public interface AbstractExecuteStrategy<REQUEST, RESPONSE>  {/*** 执行策略标识* 用于标识具体的执行策略**/default String mark() {return null;}/*** 执行策略范匹配标识* 用于在多个策略中通过模式匹配选择合适的策略执行**/default String patternMatchMark() {return null;}/*** 执行策略** @param requestParam 执行策略所需的参数,类型为REQUEST*/default void execute(REQUEST requestParam) {}/*** 执行策略,带有返回值** @param requestParam 执行策略所需的参数,类型为REQUEST* @return 执行策略后返回值,类型为RESPONSE*/default RESPONSE executeResp(REQUEST requestParam) {return null;}
}

3.3 上下文

AbstractStrategyChoose 类用于管理和选择具体的策略,并执行对应的策略。主要方法有:

  • choose(String mark, Boolean predicateFlag):如果predicateFlag为true,则进行模式匹配选择策略。如果predicateFlag为false,则直接根据 mark 查询策略。

  • chooseAndExecute(String mark, REQUEST requestParam)

    根据标识选择策略并执行,调用对应的execute方法。

  • chooseAndExecute(String mark, REQUEST requestParam, Boolean predicateFlag):根据标识和模式匹配标识选择策略并执行。

  • onApplicationEvent(ApplicationInitializingEvent event):实现ApplicationListener接口,当Spring应用初始化时,自动注册所有的AbstractExecuteStrategy实现类

3.4 具体策略实现类

@Component
public class AddStrategy  implements AbstractExecuteStrategy<Integer, Integer> {@Overridepublic String mark() {return "ADD";}@Overridepublic Integer executeResp(Integer requestParam) {return requestParam + 10; // 假设每次加10}}

3.5 测试

@SpringBootTest
class StrategyPatternApplicationTests {@Autowiredprivate AbstractStrategyChoose strategyChoose;@Testvoid testAddStrategy() {// 测试加法策略Integer addResult = strategyChoose.chooseAndExecuteResp("ADD", 20);System.out.println("Add Strategy Result: " + addResult); // 期望结果:30assertEquals(Integer.valueOf(30), addResult);}
}

参考资料

Java设计模式之策略模式(UML类图分析+代码详解)

12306: 完成高仿铁路 12306 用户 + 抢票 + 订单 + 支付服务

http://www.yayakq.cn/news/97325/

相关文章:

  • wordpress导出全站链接网站建设方案书doc模板
  • 企业为什么要做网站运营国内做网站群平台的公司
  • 中国煤炭建设协网站国家城乡建设网站
  • 网站建设微信群可以做微信游戏的网站
  • 苏州正规网站建设概况建网站需要准备什么
  • 精品网站建设需要多少钱建网站商城有哪些公司
  • 怎么学网站设计pr软件
  • 毕设做网站可能遇到的问题wordpress开发门户网站
  • seo网站推广的主要目的不包括广东建设注册中心网站
  • 网站漂浮中国十大传媒公司排名
  • wordpress酷站在网站用什么做页面布局
  • 广州开发网站服务达美网站建设
  • 超炫网站模板移动互联网开发公司
  • 图片类网站 怎么做优化wordpress徽章
  • 门户网站建设与开发郑州做网站公司+卓美
  • 建设网站包括哪些wordpress右侧的工具栏
  • 厦门功夫广告设计网站建设工作室长春少儿编程培训机构
  • 企业网站的建设原则是什么?python网站开发效率
  • 公司建站花费综合购物网站建站
  • 廊坊市网站建设公司上海网站建设系
  • 网站建设人员性格中关村手机在线
  • 中国住建部网站官网长春好的做网站公司
  • 做网站_你的出路在哪里佛山自助建站系统
  • 网站宝 西部数码网站管理助手如何做优化网站排alexa优化
  • 企业网站如何设计今天西安新消息
  • 厦门市建设局思明建设分局官方网站wordpress贷款主题
  • 工作是套模板做网站网站建设的过程包括几个阶段
  • 淄博优化网站排名爱主题wordpress
  • 网站源代码免费下载做包装设计的网站有哪些
  • 婚庆网站开发江西住房城乡建设网站