【设计模式】行为型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系列 ...
随机推荐
- windows下Redis 主从读写分离部署
原文:windows下Redis 主从读写分离部署 1.可直接下载window下的运行文件(下面这个链接) 也可以浏览github 查看相应的版本说明文档 https://github.com/Ser ...
- 嵌入式开发(*(volatile unsigned long *)) 认识
一个.说明 (*(volatile unsigned long *)) 这个语句对于不同的计算机体系结构,设备可能是port映射,也可能是内存映射的. 假设系统结构支持独立的IO地址空间.而且是por ...
- C++学习笔记26,虚函数
在C++里面,虚拟功能是功能的一类重要!不同目的可以通过在不同的虚拟功能来达到同样的动作被定义. 举一个简单的例子: #include <iostream> #include <st ...
- 构建自己的PHP框架(路由)
完整项目地址:https://github.com/Evai/Aier 上一篇中我们已经建立了一个空的 Composer 项目,本篇将讲述如何构建路由. 下面我们就开始自己来构建路由,先去 GitHu ...
- WPF自定义控件 使用阿里巴巴图标
原文:WPF自定义控件 使用阿里巴巴图标 上一篇介绍了 WPF自定义控件 按钮 的初步使用,在进一步介绍WPF自定义控件 按钮之前,先介绍一下如何在WPF项目中使用阿里巴巴图标,方便以后做示例. 1. ...
- Debian7离线升级bash漏洞—然后修复方法
### 昨天还说的传说要又一次出补丁,今天就都出来了.基本操作一致就是測试结果不一样.继续修复 Debian7 wheezy版本号的bash漏洞,例如以下操作: 1.測试是否须要升级 # env x= ...
- 网络库Asio交叉编译(Linux生成ARM)
1. Asio是一个跨平台的C++库,用于网络和底层I/O编程.Asio使用先进的C++方式提供了一系列的异步模型 2. 官方网址:http://think-async.com 3. 由于Asio库 ...
- WPF 寻找控件模板中的元素
<Window x:Class="Wpf180706.Window10" xmlns="http://schemas.microsoft.com/wi ...
- js 注册事件
<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- UWP 裁切 SoftwareBitmap
//设置源图ImageSource为WriteableBitmap类型 BitmapImage himage = this.imageTarget2.Source as BitmapImage; Ra ...