跳至主要內容

策略模式

ErenJaegerKing2024年11月4日大约 3 分钟设计模式行为型模式策略模式


相关信息

设计模式-行为型模式-策略模式


动机

我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。

作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有很多,可以选择Idea进行开发,也可以使用eclipse进行开发,也可以使用其他的一些开发工具。

定义

该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。

策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。

结构

策略模式的主要角色如下:

UML

案例实现

【例】促销活动

一家百货公司在定年度的促销活动。针对不同的节日(春节、中秋节、圣诞节)推出不同的促销活动,由促销员将促销活动展示给客户。

优缺点

优点:

缺点:

适用场景

JDK源码解析

Arrays.sort()

Comparator 中的策略模式。在Arrays类中有一个 sort() 方法

Arrays就是一个环境角色类,这个sort方法可以传一个新策略让Arrays根据这个策略来进行排序。Comparator充当的是抽象策略角色,而具体的子实现类充当的是具体策略角色。环境角色类(Arrays)应该持有抽象策略的引用来调用。

Java.util.List

Java.util.List 就是定义了⼀个增((set)、查(add )、删(remove )、改indexOf )策略,⾄于实现这个策略的 ArrayList 、LinkedList 等类,只是在具体实现时采⽤了不同的算法。但因为它们策略⼀样,不考虑速度的情况下,使⽤时完全可以互相替换使⽤。