设计模式——策略模式

来源:互联网 发布:php 配置 mongodb 编辑:程序博客网 时间:2024/05/16 10:42

一、什么是策略模式?

 

  策略模式就是定义一系列的算法,并将它们封装,使他们可以相互替换。策略模式使得算法以独立于客户而变化


  策略模式涉及到以下几个角色:


 1. 抽象策略角色:定义了具体策略需要实现的抽象方法或接口

 2. 具体策略角色:封装具体的算法

 3. 环境角色:内部持有策略类对象的引用


  举一个简单易懂的例子——计算器,计算器有操作(operation)方法,可以对应加减乘除等不同的具体运算。

 

二、策略模式框图

 


 


 


三、策略模式的具体实现代码

 

3.1 Calculate——抽象策略接口

package designpatterns.strategy;/** * Created by Olive on 2017/12/25. */public interface Calculate {    void operation(double a, double b);}

3.2 Addition、Subtraction、Multiplication、Division——具体的策略类,分别代表加减乘除四个运算,实现了Calculate接口

package designpatterns.strategy;/** * Created by Olive on 2017/12/25. */public class Addition implements Calculate{    public void operation(double a, double b) {        System.out.println((a + b));    }}public class Subtraction implements Calculate{    public void operation(double a, double b) {        System.out.println((a - b));    }}public class Multiplication implements Calculate{    public void operation(double a, double b) {        System.out.println((a * b));    }}public class Division implements Calculate {    public void operation(double a, double b) {        if (b != 0) {            System.out.println((a / b));        } else {            System.out.println("input error!");        }    }}

3.3 Calculator——环境类,定义了四个运算算法的静态类,可以通过Calculator对象直接调用

package designpatterns.strategy;/** * Created by Olive on 2017/12/25. */public class Calculator {    public static Addition addition = new Addition();    public static Subtraction subtraction = new Subtraction();    public static Multiplication multiplication = new Multiplication();    public static Division division = new Division();}

3.4 Client——客户端

package designpatterns.strategy;/** * Created by Olive on 2017/12/25. */public class Client {    public static void main(String[] args) {        Calculator calculator = new Calculator();        calculator.addition.operation(1, 1);        calculator.subtraction.operation(10, 3);        calculator.multiplication.operation(13, 7);        calculator.division.operation(16, 5);    }}

3.5 结果

2.07.091.03.2Process finished with exit code 0

 

四、策略模式和状态模式、模板方法模式的区别

 

  看到策略模式,是不是和状态模式与模板方法模式有点相像呢?那么具体有什么不同呢?


 状态模式强调的是状态,可以根据不同的外部情况作出不同的响应,这种不同的行为不是通过重写同一个方法实现的。而策略模式我们从框图中可以看到,其具体的策略是从同一个接口中得到的,策略模式是多态的一种表现


  具体策略类都实现了同一个接口方法,这看起来和模板方法模式很像。但是他们在设计的思想上差别。模板方法模式中的模板方法的执行顺序大致上由基类所控制,子类只是重写了模板方法中的一小部分,子类不会改变整体算法的执行逻辑。而策略模式所有的算法都会在子类的完成,强调具体行为的不同

 

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 优翼网站 开瑞优翼 兔子先生优耐酱 优耐特 优耐 优思耐蓝牙耳机 上海优耐特斯压缩机有限公司 优耐特扒胎机 优耐特斯螺杆空压机 优耐特斯空气压缩机 优联 优联吉运单号查询 优联接收器 优联检测 优联集团 优联衣号 优联技术 优联广告 罗技m185 优联 优胜劣汰 优胜劣败 优胜者杯 优胜客app 优胜美地 优胜客体育 优胜客 必优胜篮球 开瑞优胜 优胜教育内部很黑 优胜教育怎么样 优胜客app下载 优胜教育集团 优胜客网页版 优胜教育怎样 天津优胜教育电话 优胜教育如何 北京优胜教育 荃优丝苗 荃优822 优荃 115优蛋怎么用