介绍

我尽量用最少的语言解释总结:

Java23种设计模式之一,属于行为型模式。一个类的行为或者算法可以在运行时更改,策略对象改变context对象执行算法。

应用实例:

​ 以周瑜赔了夫人又折兵的例子。

uml类图如下

主要代码如下

策略接口

/**
* @ClassName Stragety
* @Description 策略抽象类
* @Author ouyangkang
* @Date 2018-11-15 09:06
**/
public interface Stragety { void operation();
}

策略接口实现类

/**
* @ClassName BackDoorStragety
* @Description 乔国老开后门
* @Author ouyangkang
* @Date 2018-11-15 09:14
**/
public class BackDoorStragety implements Stragety { @Override
public void operation() {
System.out.println("拜访乔国老,请求开后门");
}
}
/**
* @ClassName GreenLightStragety
* @Description 吴国太开绿灯
* @Author ouyangkang
* @Date 2018-11-15 09:16
**/
public class GreenLightStragety implements Stragety {
@Override
public void operation() {
System.out.println("拜访吴国太,请求开绿灯");
}
}

/**
* @ClassName PostBreakStragety
* @Description 孙夫人断后
* @Author ouyangkang
* @Date 2018-11-15 09:18
**/
public class PostBreakStragety implements Stragety {
@Override
public void operation() {
System.out.println("拜访孙夫人,请求断后");
}
}

context类


/**
* @ClassName Context
* @Description 策略执行
* @Author ouyangkang
* @Date 2018-11-15 09:18
**/
public class Context { private Stragety stragety; public Context(Stragety stragety){
this.stragety = stragety;
} public void operation(){
this.stragety.operation();
}
}

main


/**
* @ClassName Main
* @Description TODO
* @Author ouyangkang
* @Date 2018/9/25 11:22
**/
public class Main { public static void main(String[] args) {
System.out.println("去往吴国, 刘备慌得一匹,赵云打开第一个锦囊");
Context backDoor = new Context(new BackDoorStragety());
backDoor.operation(); System.out.println("--------------"); System.out.println("刘备在吴国还不是美滋滋,美酒,美人, 赵云打开第二个锦囊");
Context greenLight = new Context(new GreenLightStragety());
greenLight.operation(); System.out.println("--------------"); System.out.println("准备撤了,赵云打开第三个精囊");
Context postBreak = new Context(new PostBreakStragety());
postBreak.operation(); System.out.println("诸葛亮气死周瑜");
}
}

执行结果:

去往吴国, 刘备慌得一匹,赵云打开第一个锦囊
拜访乔国老,请求开后门
--------------
刘备在吴国还不是美滋滋,美酒,美人, 赵云打开第二个锦囊
拜访吴国太,请求开绿灯
--------------
准备撤了,赵云打开第三个精囊
拜访孙夫人,请求断后
诸葛亮气死周瑜

总结

可以用策略模式代替过多的if else。更加的灵活

Java设计模式从精通到入门三 策略模式的更多相关文章

  1. Java 设计模式系列(十二)策略模式(Strategy)

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

  2. Java设计模式之(十四)——策略模式

    1.什么是策略模式? Define a family of algorithms, encapsulate each one, and make them interchangeable. Strat ...

  3. JAVA设计模式详解(一)----------策略模式

    策略模式,顾名思义就是设计一个策略算法,然后与对象拆分开来将其单独封装到一系列策略类中,并且它们之间可以相互替换.首先LZ举一个例子为大家引出这一个模式. 例子:某公司的中秋节奖励制度为每个员工发放2 ...

  4. Java设计模式从精通到入门一 责任链模式

    ​ 一直都想对设计模式有一个深刻的认识,这样对于阅读源码的时候就不会那么吃力了.于是有了想要记录下设计模式的笔记.打算从自己不怎么熟悉的设计模式开始写,里面穿插着一点自己的想法,希望自己写完后,会又一 ...

  5. Java设计模式从精通到入门二 装饰器模式

    介绍 ​ 我尽量用最少的语言解释总结: ​ Java23种设计模式之一,属于结构型模式,允许向一个现有的对象添加新的功能,不改变其结构. 应用实例: ​ 给英雄联盟种的射手,添加不同的装备.先装备攻速 ...

  6. Java设计模式从精通到入门五 抽象工厂方法模式

    定义 抽象工厂类为创建一组相关和相互依赖的对象提供一组接口,而无需指定一个具体的类. ​ 这里我得把工厂方法模式得定义拿出来做一下比较:定义一个创建对象的接口,由子类决定实例化哪一个类.工厂方法是一个 ...

  7. Java设计模式从精通到入门四 工厂方法模式

    工厂方法模式 属于23中设计模式中创建型类型. 核心思想:工厂提供创建对象的接口,由子类决定实例化哪一个子类. 来源 ​ 设计模式之禅中的例子,女娲造人,通过八卦炉来进行造人,没有烧熟的为白人,烧太熟 ...

  8. 深入探索Java设计模式(四)之享元模式

    享元模式适用于需要大量相同类型对象的情况.在此,设计布局可以减少创建多个对象的方式.对象在运行时会消耗资源,因此最好在内存中使用较少的对象.它减少了内存占用并利用了程序的整体性能.本文是在学习完优锐课 ...

  9. Java设计模式(20)观察者模式(Observer模式)

    Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循 ...

随机推荐

  1. 2018-2019-2 网络对抗技术 20165320 Exp4 恶意代码分析

    2018-2019-2 网络对抗技术 20165320 Exp4 恶意代码分析 一.实践目标 监控你自己系统的运行状态,看有没有可疑的程序在运行 分析一个恶意软件,就分析Exp2或Exp3中生成后门软 ...

  2. SpringBoot集成SpringCloud

    (1).新建一个普通Maven项目,用于存放一些公共服务接口及公共的Bean等. 项目结构: 公共Bean: package cn.coreqi.entities; import java.io.Se ...

  3. Faster rcnn代码理解(2)

    接着上篇的博客,咱们继续看一下Faster RCNN的代码- 上次大致讲完了Faster rcnn在训练时是如何获取imdb和roidb文件的,主要都在train_rpn()的get_roidb()函 ...

  4. Linux关闭防火墙,开放端口

    Centos/redhat系统: 开启防火墙 #systemctl start firewalld.service 停止firewall #systemctl stop firewalld.servi ...

  5. jquery load加载页面内ajax返回的div不能响应页面js的问题的解决方案

    1. 前言 由于项目需要,需要load一个页面并保持ajax返回的div能响应其页面内的JS的click事件.这个不是 解决用jquery load加载页面到div时,不执行页面js的问题 这类问题, ...

  6. 基于MFC的ActiveX控件开发教程------------浏览器插件之ActiveX开发

    浏览器插件之ActiveX开发(一) 一般的Web应用对于浏览器插件能不使用的建议尽量不使用,因为其涉及到安全问题以及影响用户安装(或自动下载注册安装)体验问题.在有特殊需求(如涉及数据安全的金融业务 ...

  7. PHP实现获取文件后缀名的几种常用方法

    方法1: function get_file_type($filename){ $type = substr($filename, strrpos($filename, ".")+ ...

  8. cf789d 图论计数,自环闭环

    一开始没有思路,以为要判联通块. 其实不是判断联通块,而是判断边是否连在一起,没有连边的点可以忽略不计 /* 分情况讨论: 1.忽略自环,那么要取出两条相连的普通变作为只经过一次的边 2.一条自环,一 ...

  9. easyUI基础入门

    头部需要引人文件:<!DOCTYPE html><html><head> <meta charset="utf-8"> <ti ...

  10. codeforces 750D New Year and Fireworks【DFS】

    题意:烟花绽放时分为n层,每层会前进ti格,当进入下一层是向左右45°分开前进. 问在网格中,有多少网格至少被烟花经过一次? 题解:最多30层,每层最多前进5格,烟花的活动半径最大为150,每一层的方 ...