学设计模式一段时间了,有些懂了,有些半知半解,通过写笔记博客的方式总结一下:

关于策略模式,我的个人理解就是将一些经常变动的算法独立抽取出来,可以是一个方法,也可以是一个策略类,这样,如果有需求变更,只需要添加新的策略类然后进行调用切换即可。

虽然个人使用时一般是抽取为方法,但是以面向对象的角度以及书上的类图来看,采用策略类比较符合面向对象的思想。当然也不必墨守成规,灵活健壮清晰可读即可,不必过度去设计。

 

策略模式

1、场景:

用于经常变动的业务场景或算法。

2、类图:

整个策略的消费者,对应类图中的Context:

package com.pat.stratage;
/**
* 策略消费者
* @author Administrator
*
*/
public class Context {
//策略对象
private Stratage stratage; public void calculate() {
//调用策略类中的具体策略
stratage.algo();
} //构造方法
public Context() {}
public Context(Stratage stratage) {
this.stratage=stratage;
} }

策略的接口类:

package com.pat.stratage;
/**
* 具体策略接口
* @author Administrator
*
*/
public interface Stratage {
public void algo();
}

具体策略1

package com.pat.stratage;
/**
* 策略实现类1
* @author Administrator
*
*/
public class StratageA implements Stratage{ @Override
public void algo() {
System.out.println("执行策略A"); } }

具体策略2

package com.pat.stratage;

public class StratageB implements Stratage{

	@Override
public void algo() {
System.out.println("执行策略B"); } }

具体策略3

package com.pat.stratage;

public class StratageC implements Stratage{

	@Override
public void algo() {
System.out.println("执行策略C"); } }

测试:

package com.pat.stratage;

public class TestStratage {
    public static void main(String[] args) {
        //生产策略A对象
        Stratage str = new StratageA();
        //构造消费者对象
        Context con = new Context(str);
        //调用方法
        con.calculate();
        
        //生产策略B对象
        Stratage str2 = new StratageB();
        //构造消费者对象
        Context con2 = new Context(str2);
        //调用方法
        con2.calculate();
    }
} 控制台打印结果:
执行策略A
执行策略B

3、拓展提升:

上面只是策略模式的基本用法,还可以横向扩展或与其它设计模式结合,从而更灵活的运用。

例如,每个策略都需要传入参数返回计算完成的结果等等,这里不多解释了,记住核心,随机应变即可。

 
 
 
 

【设计模式】行为型01策略模式(strategy patten)的更多相关文章

  1. 设计模式(二)策略模式(Strategy)

    1.分析项目中变化部分与不变部分 2.多用组合,少用继承:用行为类组合,而不是行为的继承 案例: 第一步,把行为抽象为接口 package top.littlepage.designPattern.S ...

  2. HeadFirst设计模式读书笔记(1)-策略模式(Strategy Pattern)

    策略模式(Strategy Pattern): 定义了了算法簇,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户端. 第一个设计原则:找出应用中可能需要变化之处,把他们独立 ...

  3. 设计模式(二) 策略模式Strategy

    策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理,我个人的理解是,具有相同行为不同的行为模式,比如走路,有人速度3m/s,有人100m/s,把他们的具体行走和对象本身 ...

  4. Headfirst设计模式的C++实现——策略模式(Strategy)

    前言 最近在学习<Headfirst设计模式>,里面的例子都是Java的.但是我对Java并不熟悉,所以试着用C++来实现书中的例子. 先来看看Duck以及子类 Duck.h #inclu ...

  5. 【转】设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

    设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成 ...

  6. 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

    设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕 ...

  7. 策略模式 Strategy 政策Policy 行为型 设计模式(二十五)

    策略模式 Strategy   与策略相关的常见词汇有:营销策略.折扣策略.教学策略.记忆策略.学习策略.... “策略”意味着分情况讨论,而不是一概而论 面对不同年龄段的人,面对不同的商品,必然将会 ...

  8. [.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型)

    [.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型) 1,策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模 ...

  9. 《Head First 设计模式》[01] 策略模式

    <Head First 设计模式>(点击查看详情) 1.写在前面的话 之前在列书单的时候,看网友对于设计模式的推荐里说,设计模式的书类别都大同小异,于是自己就选择了Head First系列 ...

随机推荐

  1. OpenCV图像修复

    在OpenCV的"photo.hpp"中定义了一个inpaint函数,可以用来实现图像的修复和复原功能,inpaint函数的原型如下: void inpaint( InputArr ...

  2. 简明Python3教程 18.下一步是什么

    如果你有认真通读本书之前的内容并且实践其中包含的大量例程,那么你现在一定可以熟练使用python了. 同时你可能也编写了一些程序用于验证python特性并提高你的python技能.如果还没有这样做的话 ...

  3. 【Android发展】它Fragment发展1

    一直知道Fragment非常强大.可是一直都没有去学习,如今有些空暇的时间,所以就去学习了一下Fragment的简单入门.我也会把自己的学习过程写下来,假设有什么不足的地方希望大牛指正,共同进步. 一 ...

  4. OpenGL(十一) BMP真彩文件的显示和复制操作

    glut窗口除了可以绘制矢量图之外,还可以显示BMP文件,用函数glDrawPixels把内存块中的图像数据绘制到窗口上,glDrawPixels函数原型: glDrawPixels (GLsizei ...

  5. 解决MacOS下readlink: illegal option -- f

    时间: 2017.03.21 分类: [操作系统] 评论 Mac下的readlink没有-f参数,诸如screenfetch又会去调用readlink -f,于是每次都会出现: readlink: i ...

  6. npm学习(-)

    了解npm请前往https://www.npmjs.cn/getting-started/what-is-npm/ npm 由三个独立的部分组成: 网站 注册表(registry) 命令行工具 (CL ...

  7. WPF TreeView绑定xaml的写法

    方法一 <Window x:Class="TreeViewDemo.MainWindow" xmlns="http://schemas.microsoft.com/ ...

  8. redis 从0 到 1 键值相关命令 服务器相关命令

    keys * 获取所有的key   忽略其数据类型 数据为空   返回(empty list or set) keys a* .*b 获取以a开头 或者 以b结尾的key 返回(empty list ...

  9. inno setup 打包说明

     [Setup] 这个段包含用于安装程序和卸载程序的全局设置 AppId:在注册表中唯一的项名称,安装完64位系统在 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\M ...

  10. 【Linux】samba服务

    samba是一个实现不同操作系统之间文件共享和打印机共享的一种SMB协议的免费软件. ①Samba软件包的安装 使用源安装,在终端中输入如下命令: #sudo apt-get install samb ...