首页 > 其他分享 >设计模式-策略模式

设计模式-策略模式

时间:2023-10-01 22:22:21浏览次数:36  
标签:sort 策略 角色 ConcreteStrategy 模式 Strategy Comparator 设计模式

设计模式-策略模式

1.  涉及的角色
1)Strategy(策略)
Strategy角色负责决定实现策略所必需的接口(API)。在示例程序中,由strategy接口扮演此角色。

2)ConcreteStrategy(具体的策略)
ConcreteStrategy角色负责实现Strategy角色的接口(API),即负责实现具体的策略(战略、方向、 方法和算法)。

3)Context(上下文)
context负责使用Strategy角色。Context角色保存了ConcreteStrategy角色的实例,并使用ConcreteStrategy角色去实现需求
(总之,还是要调用Strategy角色的接口(API))

2. 使用场景
在Java中,比较器接口Comparator就是一个常见的策略模式实践
 1     public static <T> void sort(T[] a, Comparator<? super T> c) {
 2         if (c == null) {
 3             sort(a);
 4         } else {
 5             if (LegacyMergeSort.userRequested)
 6                 legacyMergeSort(a, c);
 7             else
 8                 TimSort.sort(a, 0, a.length, c, null, 0, 0);
 9         }
10     }

比如 Arrays.sort(numbers, new ReverseComparator());它允许我们传入一个Comparator实例来指定我们想要的策略
1 public class ReverseComparator implements Comparator{
2   public int compare(String s1, String s2) {
3       return Integer.compare(s1.length(), s2.length());
4  }
5 }

3. 总结
通过策略模式将策略的定义、创建、使用解耦,让每一部分都不至于太复杂,也去除了if...else这样的条件判断语句,代码的可维护性和可拓展性都提高了。

标签:sort,策略,角色,ConcreteStrategy,模式,Strategy,Comparator,设计模式
From: https://www.cnblogs.com/hld123/p/17739381.html

相关文章

  • JAVA - instanceof 模式匹配
    父类:packagecom.demo;importjava.time.LocalDate;publicclassEmployee{privateStringname;privatedoublesalary;privateLocalDatehireDay;publicEmployee(Stringname,doublesalary,intyear,intmonth,intday){this.na......
  • 软件设计模式系列之二十一——观察者模式
    1观察者模式的定义观察者模式(ObserverPattern)是一种行为型设计模式,它允许对象之间建立一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。这个模式也被称为发布-订阅模式,因为它模拟了一个主题(发布者)与多个观察者(订阅者)之间的关系。观察者......
  • dpvs dnat模式
    dnat模式发送报文src/ipvs/ip_vs_core.c针对ipv4,INET_HOOK_PRE_ROUTING注册2个函数dp_vs_pre_routing和dp_vs_in,因为nat不做防止DDos攻击的syn_proxy,所以看dp_vs_in。conn_sched新请求建立连接选择后端rs建立连接,支持tcp、udp和icmp。dp_vs_schedule->dp_vs_conn_new->dp_vs_c......
  • 单例模式
    什么是单例模式单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时,为了防止频繁地创建对象使得内存飙升,单例模式可以让程序仅在内存中创建一个对象,让所有需要调用的地方都共享这一单例对象。单例模式的类型懒汉式:在真正......
  • 自定义负载均衡策略
    通过定义IRule实现可以修改负载均衡规则,有两种方式:代码方式:在order-service中的OrderApplication类中,定义一个新的IRule:@BeanpublicIRulerandomRule(){  returnnewRandomRule();} 配置文件方式:在order-service的application.yml文件中,添加新的配置也可以修改规......
  • 【11.0】Fastapi的OAuth2.0的授权模式
    【一】OAuth2.0的授权模式授权码授权模式(AuthorizationCodeGrant)隐式授权模式(ImplicitGrant)密码授权模式(ResourceOwnerPasswordCredentialsGrant)客户端凭证授权模式(ClientCredentialsGrant)【二】密码授权模式【1】FastAPI的OAuth2PasswordBearer说明......
  • java 实现外观模式
    外观模式(FacadePattern)是一种结构型设计模式,它提供了一个简化的接口,用于访问一组相关的接口或子系统。外观模式的主要目的是隐藏复杂的系统结构,提供一个更简单的接口供客户端使用。以下是一个简单的Java示例,演示如何实现外观模式:首先,假设我们有一个音响系统,它包含了多个子系统,如音......
  • java 实现模板方法模式
    模板方法模式(TemplateMethodPattern)是一种行为型设计模式,它定义了一个算法的骨架,将具体的步骤延迟到子类中实现。模板方法模式使得子类可以重新定义算法的某些步骤,而不改变算法的结构。以下是一个简单的Java示例,演示如何实现模板方法模式:首先,定义一个抽象类Game,它包含一个模板方......
  • 金融量化项目案例 -- 双均线策略制定
    博客地址:https://www.cnblogs.com/zylyehuo/开发环境anaconda集成环境:集成好了数据分析和机器学习中所需要的全部环境安装目录不可以有中文和特殊符号jupyteranaconda提供的一个基于浏览器的可视化开发工具使用tushare包获取某股票的历史行情数据!pipinstall-......
  • 访问者模式
    访问者模式案例引入要求1.将观众分为男生和女生,对歌手进行评价,当看完某个歌手表演后,对于歌手有不同的评价(评价的类别,有成功,失败等)。传统方式实现思路创建一个Person类,其有两个子类,分别是Man和WoMan,使用ifelse分支,去判断一个歌手的评价,成功对应成功分支,失败对应失败分支。......