【设计模式】行为型01策略模式(strategy patten)
学设计模式一段时间了,有些懂了,有些半知半解,通过写笔记博客的方式总结一下:
关于策略模式,我的个人理解就是将一些经常变动的算法独立抽取出来,可以是一个方法,也可以是一个策略类,这样,如果有需求变更,只需要添加新的策略类然后进行调用切换即可。
虽然个人使用时一般是抽取为方法,但是以面向对象的角度以及书上的类图来看,采用策略类比较符合面向对象的思想。当然也不必墨守成规,灵活健壮清晰可读即可,不必过度去设计。
策略模式
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)的更多相关文章
- 设计模式(二)策略模式(Strategy)
1.分析项目中变化部分与不变部分 2.多用组合,少用继承:用行为类组合,而不是行为的继承 案例: 第一步,把行为抽象为接口 package top.littlepage.designPattern.S ...
- HeadFirst设计模式读书笔记(1)-策略模式(Strategy Pattern)
策略模式(Strategy Pattern): 定义了了算法簇,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户端. 第一个设计原则:找出应用中可能需要变化之处,把他们独立 ...
- 设计模式(二) 策略模式Strategy
策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理,我个人的理解是,具有相同行为不同的行为模式,比如走路,有人速度3m/s,有人100m/s,把他们的具体行走和对象本身 ...
- Headfirst设计模式的C++实现——策略模式(Strategy)
前言 最近在学习<Headfirst设计模式>,里面的例子都是Java的.但是我对Java并不熟悉,所以试着用C++来实现书中的例子. 先来看看Duck以及子类 Duck.h #inclu ...
- 【转】设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成 ...
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕 ...
- 策略模式 Strategy 政策Policy 行为型 设计模式(二十五)
策略模式 Strategy 与策略相关的常见词汇有:营销策略.折扣策略.教学策略.记忆策略.学习策略.... “策略”意味着分情况讨论,而不是一概而论 面对不同年龄段的人,面对不同的商品,必然将会 ...
- [.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型)
[.net 面向对象程序设计深入](26)实战设计模式——策略模式 Strategy (行为型) 1,策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模 ...
- 《Head First 设计模式》[01] 策略模式
<Head First 设计模式>(点击查看详情) 1.写在前面的话 之前在列书单的时候,看网友对于设计模式的推荐里说,设计模式的书类别都大同小异,于是自己就选择了Head First系列 ...
随机推荐
- 3-2 从降级的例子 认识Polly套路
1 没有返回值的降级 Policy policy = Policy.Handle<Exception>().Fallback(() => { Console.WriteLine(&q ...
- 注释为基础的SpringMVC
SpringMVC根据征求意见 正在使用SpringMVC以前的评论.首先,为使说明.于springMVC3.x版本号之后提供了很easy的启用注解方法仅仅须要的-servlet.xml中加上< ...
- [WebGL入门]十一,着色器编译器和连接器
注意:文章翻译http://wgld.org/,原作者杉本雅広(doxas).文章中假设有我的额外说明.我会加上[lufy:].另外.鄙人webgl研究还不够深入.一些专业词语,假设翻译有误.欢迎大家 ...
- 亲串 (hdu 2203 KMP)
亲串 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- ABP缓存示例
private readonly ICacheManager _cacheManager; public ProgrammeManage(ICacheManager cacheManager) { _ ...
- 关于JSON 字段数据的直接查询
最新的pgSQL 对json的支持在进一步加强!虽然我也学了那么点皮毛,但是json数据对于WEB的开发确实很重要,苦苦学习了很长一段时间,不断的关系PGSQL的动向! 好在翻看很多高人的例子和介绍, ...
- WPF利用VisualTreeHelper遍历寻找对象的子级对象或者父级对象
原文:WPF利用VisualTreeHelper遍历寻找对象的子级对象或者父级对象 简介 本文将完整叙述我利用VisualTreeHelper实现题述功能的全部过程,想直接看函数实现的朋友可以跳到函数 ...
- n阶贝塞尔曲线绘制(C/C#)
原文:n阶贝塞尔曲线绘制(C/C#) 贝塞尔是很经典的东西,轮子应该有很多的.求n阶贝塞尔曲线用到了 德卡斯特里奥算法(De Casteljau's Algorithm) 需要拷贝代码请直接使用本文最 ...
- Selenium-简介
一.简介 Selenium是UI自动化的一个框架. Selenium1.0时代就是用js注入技术与浏览器交互. Selenium WebDriver就是调用浏览器原生的API来实现的操作.他是Clie ...
- Struts2之Struts2
Struts2-2.5.5版本是目前为止最新的版本了,相对于之前的2.3版本以及再之前的版本而言,新版本改动了很多. 好了,废话不多说,GO CODE! 基本jar包: web.xml核心配置,这里要 ...