介绍

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

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. np.savetxt()——将array保存到txt文件,并保持原格式

    问题:1.如何将array保存到txt文件中?2.如何将存到txt文件中的数据读出为ndarray类型? 需求:科学计算中,往往需要将运算结果(array类型)保存到本地,以便进行后续的数据分析. 解 ...

  2. 【Mysql sql inject】【入门篇】sqli-labs使用 part 3【15-17】

      Less-15- Blind- Boolian Based- String 1)工具用法: sqlmap -u --batch --technique BEST 2)手工注入 时间盲注放弃用手工了 ...

  3. win10-Anaconda2-Theano-cuda7.5-VS2013

    两天的辗转反侧,终于灵光一现找到了错误. 首先,我在win10下配置好了gpu和cudnn版本的caffe.但是因为win平台的限制,caffe用的不够舒服.因为之前用过一阵子theano,虽然很慢, ...

  4. VxWorks软件开发项目实例完全解析1-VxWorks简介

    1.前言 VxWorks是专门为实时嵌入式系统设计开发的32位操作系统.主要有如下特点: 实时性强 支持多任务 体积小可裁剪 支持多种CPU 支持网络通信串口通信 汇编+标准C的编程模式.支持C++ ...

  5. Linux内核驱动之延时 【转】

    转自:http://blog.chinaunix.net/uid-24219701-id-3288103.html  jiffies 计数器 定时器中断由系统定时硬件以规律地间隔产生; 这个间隔在启动 ...

  6. ruia笔记

    ruia笔记 loop = loop or asyncio.new_event_loop() get_event_loop()方法仅在同样的线程中生效,如果在一个新线程中,应该用new_event_l ...

  7. ajax返回json对象的两种写法

    1. 前言 dataType: 要求为String类型的参数,预期服务器返回的数据类型.如果不指定,JQuery将自动根据http包mime信息返回responseXML或responseText,并 ...

  8. Java的初始化执行顺序(父类static变量->子类static变量->父类成员变量->父类构造器->成员变量->构造器->main函数)

    1. 引言 了解Java初始化的顺序,有助于理解Java的初始化机制和内存机制. 顺序:父类static变量->子类static变量->父类成员变量->父类构造器->成员变量- ...

  9. swift的一些知识点(不断完善中)

    首先,隆重推荐文章http://www.infoq.com/cn/articles/swift-brain-gym-optional swift 烧脑体操!目前有4篇文章,说的都很好! 1. 应该充分 ...

  10. Java基础93 JDBC连接MySQL数据库

    本文知识点(目录): 1.什么是jdbc     2.jdbc接口的核心API     3.使用JDBC技术连接MySQL数据库的方法    4.使用Statement执行sql语句(DDL.DML. ...