小白学习java设计模式之策略模式
策略模式:
1.分析项目中的变化部分与不变部分(每个设计模式都要分析的)
2.多用组合少用继承;用行为类组合,而不是行为继承,更具有弹性
直接上代码:
package com.wz.oneStrategist; /**
* 动物类(基类)
*
* @author Administrator
* @create 2018-04-17 21:10
*/
public class Animal { AnimalRun ar ; public Animal(AnimalRun ar) {
this.ar = ar;
} public void run(){
ar.run();
} }
package com.wz.oneStrategist; /**
* 动物的奔跑接口
*
* @author Administrator
* @create 2018-04-17 21:12
*/
public interface AnimalRun { public void run(); }
package com.wz.oneStrategist; /**
* 动物跑得快的类
*
* @author Administrator
* @create 2018-04-17 21:14
*/
public class AnimalRunQuick implements AnimalRun{
@Override
public void run() {
System.out.println("跑得快");
}
}
package com.wz.oneStrategist; /**
* 动物跑得慢的类
*
* @author Administrator
* @create 2018-04-17 21:14
*/
public class AnimalRunSlow implements AnimalRun{
@Override
public void run() {
System.out.println("跑得慢");
}
}
package com.wz.oneStrategist; /**
* 狗的类(动物的子类)
*
* @author Administrator
* @create 2018-04-17 21:17
*/
public class Dog extends Animal{ public Dog(AnimalRun ar) {
super(ar);
}
}
package com.wz.oneStrategist; /**
* 乌龟类(动物的子类)
*
* @author Administrator
* @create 2018-04-17 21:20
*/
public class Tortaise extends Animal { public Tortaise(AnimalRun ar) {
super(ar);
}
}
package com.wz.oneStrategist; /**
* 测试类
*
* @author Administrator
* @create 2018-04-17 21:22
*/
public class TestMain { public static void main(String[] args) {
// 测试跑得快
Animal animal1 = new Dog(new AnimalRunQuick());
animal1.run();; // 测试跑得慢
Animal animal2 = new Tortaise(new AnimalRunSlow());
animal2.run();
}
} 这个例子主要体现的是构造函数传递的参数,如果还有其他的类,比如说豹子类,老虎类等等,都是new AnimalRunQuick类的对象,可是为什么不使用继承呢?这就是我们要说的,如果使用继承,那么在豹子类,老虎类中都要重写Animal的run方法,3个还好说,如果是100个类,1000个类呢?使用策略模式就不需要重写run方法,这只是一个很简单的例子,这里也就说了 多用组合少用继承;用行为类组合,而不是行为继承,更具有弹性
小白学习java设计模式之策略模式的更多相关文章
- Java设计模式之策略模式(一)
今年寒假没有回家,打算利用这个假期的时间进行学习设计模式,这一个人感觉比较牛的知识,前一段时间一直在忙着搞自己的专业课,还有就是捣鼓了一下Linux系统,没有好好的学习关于Java还有Android方 ...
- Java设计模式1——策略模式(Strategy Pattern)
最近觅得一本好书<您的设计模式>,读完两章后就能断言,一定是一头极品屌丝写的,而且是专写给开发屌丝男的智慧枕边书,小女子就委屈一下,勉强看看,人笨,谁让他写得这么通俗易懂呢!为了加深理解, ...
- JAVA设计模式 之 策略模式
一. 定义 设计模式定义了算法族,分别封装起来,让他们之间可以互相替代,此模式让算法的变化独立于使用算法的客户(该定义来自于Head First 设计模式). 二. 应用场景 当我们在应用程序中完成一 ...
- Java设计模式---Strategy策略模式
参考于 : 大话设计模式 马士兵设计模式视频 1.场景介绍 购物网站上有一个产品,有三个字段,档次,价格,重量. 有些同学喜欢轻的,有些手头紧,想要便宜的,有些喜欢档次高的. 那么我们为了提高网站用户 ...
- 折腾Java设计模式之策略模式
博客原文地址 简介 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式.简单理解就是一组算法,可以互换,再简单点策略就是封装算法. ...
- 23中java设计模式(1)-- 策略模式
近来不太忙,就打算抽空看下源码补充一下知识,当我看了之后我发现看源码的关键是要弄清楚类之家的关系以及为何要这样的关系,否则如果只看具体的代码那不如去学习会儿算法. 于是就打算从设计模式入手,边学习边记 ...
- Java 设计模式之 策略模式
思维导图: 我们先来看 STRATEGY 设计模式的通俗解释: 跟不同类型的MM约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去海边浪漫最合适,但目的都是为了得到 MM 的芳心, ...
- Java设计模式之策略模式(Strategy)
前言: 最近一直在学习基于okHttp网络请求,学习的过程中就想起了之前项目中有这么一个需求不同的接口要采用不同的加密方式,比如登录之前要采用RSA加密,登录之后要采用AES加密,当时是采用靠传递一个 ...
- java设计模式之策略模式
策略模式 定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户(大话设计模式). 策略模式UML图 策略模式代码 古代的各种计谋都是一种策略,这次我们 ...
随机推荐
- 关于JAVA开发工具IDEA使用
安装IntelliJ IDEA 一.安装JDK 1 下载最新的jdk,这里下的是jdk-8u66 2 将jdk安装到默认的路径C:\Program Files\Java目录下 二.安装IntelliJ ...
- JavaScript 通过队列实现异步流控制
知乎上面看到一个面试题. 某个应用模块由文本框 input,以及按钮 A,按钮 B 组成.点击按钮 A,会向地址 urlA 发出一个 ajax 请求,并将返回的字符串填充到 input 中(覆盖 in ...
- JavaScript(第二十九天)【js处理XML】
随着互联网的发展,Web应用程序的丰富,开发人员越来越希望能够使用客户端来操作XML技术.而XML技术一度成为存储和传输结构化数据的标准.所以,本章就详细探讨一下JavaScript中使用XML的技术 ...
- 使用linux下的crontab定时任务跑定时脚本
使用linux下的crontab定时任务跑定时脚本 tags:定时任务 定时脚本 crontab linux定时脚本 linux 引言:应该有许多人曾经很好奇一些定时脚本是怎么做出来的.我们这次就来说 ...
- PTA題目的處理(三)
题目7-1 高速公路超速處罰 1.實驗代碼 #include <stdio.h> //#include <stdlib.h> int main() { int csp,lsp; ...
- PTA題目的處理(二)
題目7-1 計算分段函數[1] 1.實驗代碼 #include <stdio.h> int main() { float x,y; scanf("%f",&x) ...
- iOS开发-OC数据类型
以下是OC中的实例,Swift部分不适用 iOS中的注释 // 单行注释 // 注释对代码起到解释说明的作用,注释是给程序员看的,不参与程序运行 /* 多行注释 Xcode快捷键 全选 cm ...
- ios中录音功能的实现AudioSession的使用
这个星期我完成了一个具有基本录音和回放的功能,一开始也不知道从何入手,也查找了很多相关的资料.与此同时,我也学会了很多关于音频方面的东西,这也对后面的录音配置有一定的帮助.其中参照了<iPhon ...
- 【基础知识】Flex-弹性布局原来如此简单!!
简言 布局的传统解决方案是基于盒状模型,依赖 display + position + float 方式来实现,灵活性较差.2009年,W3C提出了一种新的方案-Flex,Flex是Flexible ...
- JAVA线程池原理详解(1)
线程池的优点 1.线程是稀缺资源,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以重复使用. 2.可以根据系统的承受能力,调整线程池中工作线程的数量,防止因为消耗过多内存导致服务器崩溃. 线 ...