前面的博文中分别介绍了Java设计模式中的创建型模式和结构型模式。从本文开始,将分别介绍设计模式中的第三大类,行为型模式。首先我们了解下分为此三大类的依据。

创建型模式:主要侧重于对象的创建过程;

结构型模式:主要侧重于处理类或对象的组合;

行为型模式:主要侧重于类或对象之间的交互以及职责分配。

首先了解下策略模式的概念:定义了多个算法,并将它们封装起来(一般的是每个算法封装成一个单独的类),让算法独立于客户端而可以单独变化。

具体可以看一下下面的例子(以计算加、减、乘为例):

1. 对加、减、乘每个算各自封装成一个类,首先定义其共同的接口:

 interface ICalculator{

     public int calculator(int a, int b);

 }

2. 分别定义加、减、乘算法类:

 class Plus implements ICalculator {

     @Override
public int calculator(int a, int b) {
return a + b;
} }
 class Minus implements ICalculator {

     @Override
public int calculator(int a, int b) {
return a - b;
} }
 class Multiply implements ICalculator {

     @Override
public int calculator(int a, int b) {
return a * b;
} }

3. 定义上下文环境类,用于封装各个算法类操作:

 class Context{

     private ICalculator iCalculator;

     public Context(ICalculator iCalculator){
this.iCalculator = iCalculator;
} public int calculator(int a, int b){
return iCalculator.calculator(a, b);
} }

4. 测试:

 public class StrategyTest {

     public static void main(String[] args) {
Context context = new Context(new Plus());
context.calculator(2, 3);
} }

设计模式总结篇系列:策略模式(Strategy)的更多相关文章

  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. Java 设计模式系列(十二)策略模式(Strategy)

    Java 设计模式系列(十二)策略模式(Strategy) 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以 ...

  6. 设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)

    在前段时间呢陆陆续续的更新了一系列关于重构的文章.在重构我们既有的代码时,往往会用到设计模式.在之前重构系列的博客中,我们在重构时用到了“工厂模式”.“策略模式”.“状态模式”等.当然在重构时,有的地 ...

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

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

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

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

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

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

  10. Java设计模式(18)策略模式(Strategy模式)

    Strategy是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类. Stratrgy应用比较广泛,比如,公司经营业务变化图,可能有两种实现方式,一个是线条曲线, ...

随机推荐

  1. Spring Boot MyBatis注解:@MapperScan和@Mapper

    最近参与公司的新项目架构搭建,在使用mybatis的注解时,和同时有了不同意见,同事认为使用@Mapper注解简单明了,而我建议使用@MapperScan,直接将mapper所在的目录扫描进去就行,而 ...

  2. 多项式与三角函数求导——BUAA OO 第一单元作业总结

    第一次作业 需求简要说明 针对符合规定的多项式表达式输出其符合格式规定的导函数多项式,格式错误输出WRONG FORMAT! 带符号整数 支持前导0的带符号整数,符号可省略,如: +02.-16> ...

  3. BZOJ1386 : [Baltic2000]Stickers

    显然每一位的限制独立,对于每一位求出仅限制该位下的最大数,然后求最小值即可. 假设当前要求数字$d$的答案: 考虑填数字的过程,可以看作依次考虑一个序列中的每个数,当前缀和$<0$时退出. 设$ ...

  4. input type='file' 上传文件 判断图片的大小是否合格与witdh 和 height 是否合格

    function CheckFiles(obj) { var array = new Array('gif', 'jpeg', 'png', 'jpg'); //可以上传的文件类型 if (obj.v ...

  5. JVM虚拟机个人理解

    针对于java1.8版本,JVM的系统架构 类加载机制: 堆内存结构图: 面试题:一个对象从创建到销毁经历了什么? 1.new一个对象时,在堆内存中开辟一块空间. 2.给开辟的空间分配一个地址. 3. ...

  6. kubernetes之Kubeadm快速安装v1.12.0版

    通过Kubeadm只需几条命令即起一个单机版kubernetes集群系统,而后快速上手k8s.在kubeadm中,需手动安装Docker和kubeket服务,Docker运行容器引擎,kubelet是 ...

  7. IIS 接口访问404

    IIS->网站->ASP->启用父路径(true)

  8. SpringBoot+ Mybatis 搭建

    spring boot+mybatis整合   LZ今天自己搭建了下Spring boot+Mybatis,比原来的Spring+SpringMVC+Mybatis简单好多.其实只用Spring bo ...

  9. vue 路由跳转,传参

    一.直接跳转 //js1.this.$router.push('/ad_new') //html 2.<router-link to="/ad_check"> < ...

  10. 微信测试号开发入门配置问题java

    这个测试号配置弄了好几天了,入了无数坑,终于解决了...辛苦我了,手动安慰一下自己.. 为了萌新们以后不要再浪费时间绕半天做无用功.看看楼楼的艰苦历程吧. 此教程针对没有云服务器,没有自己的域名的.没 ...