note_2_Strategy Pattern

来源:互联网 发布:生物软件下载 编辑:程序博客网 时间:2024/06/07 16:43

策略模式

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

图示

一个行为接口(or abstract class),多个实现接口的类(方法族);在一个类中,对行为接口引用,一个初始化的方法,初始化行为接口,调用相应行为。
策略模式涉及接口和类

介绍

意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。
何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。
如何解决:将这些算法封装成一个一个的类,任意地替换。
应用实例: 1、诸葛亮的锦囊妙计,每一个锦囊就是一个策略。 2、旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。 3、JAVA AWT 中的 LayoutManager??
优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。
缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。
使用场景: 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中选择一种。 3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。
注意事项:如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。

步骤一

创建行为接口 Strategy.java

public interface Strategy {   public int doOperation(int num1, int num2);}

步骤二

创建实现接口的实体类。
OperationAdd.java

public class OperationAdd implements Strategy{   @Override   public int doOperation(int num1, int num2) {      return num1 + num2;   }}

OperationSubstract.java

public class OperationSubstract implements Strategy{   @Override   public int doOperation(int num1, int num2) {      return num1 - num2;   }}

OperationMultiply.java

public class OperationMultiply implements Strategy{   @Override   public int doOperation(int num1, int num2) {      return num1 * num2;   }}

步骤三

创建 Context 类。
Context.java

public class Context {   private Strategy strategy;   public Context(Strategy strategy){      this.strategy = strategy;   }   public int executeStrategy(int num1, int num2){      return strategy.doOperation(num1, num2);   }}

步骤四

使用 Context 来查看当它改变策略 Strategy 时的行为变化。

StrategyPatternDemo.java

public class StrategyPatternDemo {   public static void main(String[] args) {      Context context = new Context(new OperationAdd());              System.out.println("10 + 5 = " + context.executeStrategy(10, 5));      context = new Context(new OperationSubstract());              System.out.println("10 - 5 = " + context.executeStrategy(10, 5));      context = new Context(new OperationMultiply());              System.out.println("10 * 5 = " + context.executeStrategy(10, 5));   }}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 梦见坐牢 陈雨昂坐牢 坐牢 初瑞雪坐牢 郑远元坐牢 朱坤民坐牢 焦家良坐牢 替人坐牢100万一年 梦见自己坐牢 撞死人要坐牢吗 郑远元怎么坐牢的 李银桥为何坐牢 徐增平为什么坐牢 开车撞死人要坐牢吗 陈雨昂为什么坐牢 迟志强为什么坐牢 徐增平怎么会坐牢 辛有志为什么坐牢 信用卡不还会坐牢吗 自称太美不适合坐牢 2019年信用卡逾期坐牢新规 工地死人安全员要坐牢吗 信用卡欠款多少会坐牢 拘留37天一定会坐牢吗 个人宣布破产要坐牢吗 坐疮 女坐板疮图片 坐疮图片 坐板疮初期图片 坐疮擦什么药效果好 坐板疮涂什么药膏 长坐板疮怎么办 坐褥疮 坐板疮怎么能快速去除 屁股长坐疮怎么办 玫瑰坐疮 什么是坐疮 坐板疮 图片图谱 屁股坐疮用什么药膏 屁股上长坐疮了怎么办 长坐疮怎么办