Java设计模式从精通到入门三 策略模式
介绍
我尽量用最少的语言解释总结:
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设计模式从精通到入门三 策略模式的更多相关文章
- Java 设计模式系列(十二)策略模式(Strategy)
Java 设计模式系列(十二)策略模式(Strategy) 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以 ...
- Java设计模式之(十四)——策略模式
1.什么是策略模式? Define a family of algorithms, encapsulate each one, and make them interchangeable. Strat ...
- JAVA设计模式详解(一)----------策略模式
策略模式,顾名思义就是设计一个策略算法,然后与对象拆分开来将其单独封装到一系列策略类中,并且它们之间可以相互替换.首先LZ举一个例子为大家引出这一个模式. 例子:某公司的中秋节奖励制度为每个员工发放2 ...
- Java设计模式从精通到入门一 责任链模式
一直都想对设计模式有一个深刻的认识,这样对于阅读源码的时候就不会那么吃力了.于是有了想要记录下设计模式的笔记.打算从自己不怎么熟悉的设计模式开始写,里面穿插着一点自己的想法,希望自己写完后,会又一 ...
- Java设计模式从精通到入门二 装饰器模式
介绍 我尽量用最少的语言解释总结: Java23种设计模式之一,属于结构型模式,允许向一个现有的对象添加新的功能,不改变其结构. 应用实例: 给英雄联盟种的射手,添加不同的装备.先装备攻速 ...
- Java设计模式从精通到入门五 抽象工厂方法模式
定义 抽象工厂类为创建一组相关和相互依赖的对象提供一组接口,而无需指定一个具体的类. 这里我得把工厂方法模式得定义拿出来做一下比较:定义一个创建对象的接口,由子类决定实例化哪一个类.工厂方法是一个 ...
- Java设计模式从精通到入门四 工厂方法模式
工厂方法模式 属于23中设计模式中创建型类型. 核心思想:工厂提供创建对象的接口,由子类决定实例化哪一个子类. 来源 设计模式之禅中的例子,女娲造人,通过八卦炉来进行造人,没有烧熟的为白人,烧太熟 ...
- 深入探索Java设计模式(四)之享元模式
享元模式适用于需要大量相同类型对象的情况.在此,设计布局可以减少创建多个对象的方式.对象在运行时会消耗资源,因此最好在内存中使用较少的对象.它减少了内存占用并利用了程序的整体性能.本文是在学习完优锐课 ...
- Java设计模式(20)观察者模式(Observer模式)
Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循 ...
随机推荐
- 消息队列介绍和SpringBoot2.x整合RockketMQ、ActiveMQ 9节课
1.JMS介绍和使用场景及基础编程模型 简介:讲解什么是小写队列,JMS的基础知识和使用场景 1.什么是JMS: Java消息服务(Java Message Service),Java ...
- IOS中的用户安全
用户安全: 原则:在网络传输过程中,关于用户的密码是不能传递明文的,需要通过加密之后进行传递, 一般采用的加密技术是: (1)md5+盐 (2)hmac+md5 (3)hmac+md5+时间戳 这 ...
- 搭建yum服务器
一.yum服务器端配置1.安装FTP软件#yum install vsftpd #service vsftpd start#chkconfig --add vsftpd#chkconfig vsftp ...
- Ubuntu16.04+CUDA8.0+cudnn6
按之前的方法给TITAN X安装cuda8.0会发生循环登录的问题,因此换了一种安装方法 参考:https://www.jianshu.com/p/002ece426793,http://blog.c ...
- Linux之定时器与时间管理 【转】
转自:http://blog.chinaunix.net/uid-23228758-id-154820.html 定时器与时间管理: 次,为一秒.一般的情况下编程者不要改变这个值,因为内核编很多代码都 ...
- C++11中智能指针的原理、使用、实现
目录 理解智能指针的原理 智能指针的使用 智能指针的设计和实现 1.智能指针的作用 C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理.程序员自己管理堆内存可以提高了程序 ...
- iframe传递参数问题
在页面中嵌入了iframe,如果需要传递参数到iframe中 1.通过将参数嵌入到url中,在iframe中使用${param.xxx}可以获取 2.通过将参数存入到session中,在iframe中 ...
- 如何用jQuery获得select的值
如何用jQuery获得select的值,在网上找了看了一下,下面将总结一下: 1.获取第一个option的值 $('#test option:first').val(); 2.最后一个o ...
- Android 图片平铺效果
我们大家都看过平铺的效果,那么我们都是怎么样才能实现的那,我们其实主要用到的就是api,我们一开始new一个bitmap,就可以了,但是,大家都没有想过,我们还可以用什么方法来做这个事情那,那么我们就 ...
- Ex 5_28 Alice想要举办一个舞会..._第十次作业
根据总人数建立顶点数量为总人数的无向图,顶点之间有边相连表示两个人相互认识,没有边则表示不认识.对于每一个顶点v,设d(v)表示顶点的度,若d(v)<5,即v认识的人数少于5,则不邀请v,若d( ...