ps做网站字号大小,asp网站制作软件,杭州百度百家号seo优化排名,沥林行业网站建设写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用#xff0c;主要是下面的UML图可以起到大作用#xff0c;在你学习过一遍以后可能会遗忘#xff0c;忘记了不要紧#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。
策略模式#xff08;Strategy…写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用主要是下面的UML图可以起到大作用在你学习过一遍以后可能会遗忘忘记了不要紧只要看一眼UML图就能想起来了。同时也请大家多多指教。
策略模式Strategy
是一种行为型模式。
目录
一、概述 1.1、直观的理解
1.2、适用场景
1.3、主要的角色
1.4、描述对象关系的UML图如下
二、代码示例
2.1、对象之间的关系用UML图表示如下
2.2、Java版的代码如下 一、概述 1、定义算法家族分别封装起来让它们之间可以相互替换此模式让算法的变化不会影响到使用算法的客户。 1.1、直观的理解
以商场购物活动为例商场经常在一些特殊的日子里做各种不同的促销活动那么不同的促销打折方式就可以当做一种不同的策略其中原价、打折、满减都是具体的策略如下 除此之外
1.2、适用场景 许多相关的类仅仅是具体实现上有差异需要使用一个算法的不同变体算法中的一些数据不应该让客户知道一个类使用条件语句定义了多种行为可以把这些行为分别封装起来 注上述最后一点书上说可以减少一些条件语句我的理解是针对客户来说是可以减少的而不是说真的完全不需要编写条件语句了比如可以使用策略模式简单工厂模式将条件判断放到策略工厂里客户只需要给策略工厂传递参数即可由策略工厂判断该实例化哪个策略并且运行。
1.3、主要的角色 策略类策略抽象类或接口 具体的策略类多个上下文类先给上下文类填装一个具体策略实例对象然后就可以通过它来访问策略类 1.4、描述对象关系的UML图如下 二、代码示例
假设每次要从3个不同的算法挑一个使用问题简单就不再分析了你可以把这当做一个模板方便灵活使用
2.1、对象之间的关系用UML图表示如下 2.2、Java版的代码如下
策略类的接口
public interface Strategy {public void algorithmInterface();
}具体策略类1
public class ConcreteStrategy1 implements Strategy {Overridepublic void algorithmInterface() {System.out.println(算法1实现);}
}具体策略类2
public class ConcreteStrategy2 implements Strategy {Overridepublic void algorithmInterface() {System.out.println(算法2实现);}
}具体策略类3
public class ConcreteStrategy3 implements Strategy {Overridepublic void algorithmInterface() {System.out.println(算法3实现);}
}上下文类
public class Context {Strategy strategy;public Context(Strategy strategy) {this.strategy strategy;}public void contextInterface() {strategy.algorithmInterface();}
}主程序发起请求的类
public class Main {public static void main(String[] args) {Context context;context new Context(new ConcreteStrategy1());context.contextInterface();context new Context(new ConcreteStrategy2());context.contextInterface();context new Context(new ConcreteStrategy3());context.contextInterface();}
}这里暂时就不再例其它编程语言的例子了可以把上面的Java例子复制到你本地运行main函数试一下加深理解。这些代码都是我自己学习的时候根据一些教材手敲的不存在bug可以直接运行。
如果觉得本文还不错就请点个赞给作者一点鼓励吧如果有建议也请评论指教和讨论