Java设计模式-策略模式,一起来看看吧,让我们一起为进阶做一个充足的准备吧!!!! 会了就当复习丫,不会来一起来看看吧。 很喜欢一句话:“八小时内谋生活,八小时外谋发展”。 如果你也喜欢,让我们一起坚持吧!!
共勉
😁
我想这才是夏天吧,心目中的夏天
在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,今天的作业该让这个女朋友写还是那个女朋友写勒?好难选啊,算了吧还是自己来吧。(其实就是没有😂)。正文:例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等,超市促销可以釆用打折、送商品、送积分等方法。
大家编程肯定知道,当实现某一个功能存在多种算法或者策略时,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能,如我们写个排序算法题,可以选择二叉树排序、快速排序、堆排序等,根据给出的条件不同,从中选出最适合的排序算法。
还有咱们作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有很多,可以选择Idea进行开发,也可以使用eclipse进行开发,也可以使用其他的一些开发工具。
策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。
策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式
,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。
策略模式的主要角色如下。
1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。
3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。
4、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。
如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。
【例】促销活动
一家百货公司在定年度的促销活动。针对不同的节日(春节、中秋节、圣诞节)推出不同的促销活动,由促销员将促销活动展示给客户。
类图:
定义百货公司所有促销活动的共同接口
public interface Strategy {
void show();
}
定义具体策略角色(Concrete Strategy):每个节日具体的促销活动
//为春节准备的促销活动A
public class StrategyA implements Strategy {
public void show() {
System.out.println("春节活动:买一送一");
}
}
//为中秋准备的促销活动B
public class StrategyB implements Strategy {
public void show() {
System.out.println("中秋活动:满200元减50元");
}
}
//为圣诞准备的促销活动C
public class StrategyC implements Strategy {
public void show() {
System.out.println("圣诞活动:满1000元加一元换购任意200元以下商品");
}
}
定义环境角色(Context):用于连接上下文,即把促销活动推销给客户,这里可以理解为销售员
public class SalesMan {
//持有抽象策略角色的引用
private Strategy strategy;
public SalesMan(Strategy strategy) {
this.strategy = strategy;
}
//向客户展示促销活动
public void salesManShow(){
strategy.show();
}
}
客户端:
public class Client {
public static void main(String[] args) {
SalesMan salesMan = new SalesMan(new StrategyA());
salesMan.salesManShow();
System.out.println("-----------");
SalesMan salesManB = new SalesMan(new StrategyB());
salesManB.salesManShow();
System.out.println("-----------");
/**
* 春节活动:买一送一
* -----------
* 中秋活动:满200元减50元
* -----------
*/
}
}
我也不知道文章写出来是有用还是无用,只是想做一个分享。希望大家能够喜欢并且在这里能有收获。
当然不可否认,我也想获得那种别人认可的那种快乐,并且能让我继续坚持。
你好啊,要天天开心哦。下篇文章再见。
此系列还在持续更新中… 我一定还会回来的。😁