策略模式:
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设计模式之策略模式的更多相关文章

  1. Java设计模式之策略模式(一)

    今年寒假没有回家,打算利用这个假期的时间进行学习设计模式,这一个人感觉比较牛的知识,前一段时间一直在忙着搞自己的专业课,还有就是捣鼓了一下Linux系统,没有好好的学习关于Java还有Android方 ...

  2. Java设计模式1——策略模式(Strategy Pattern)

    最近觅得一本好书<您的设计模式>,读完两章后就能断言,一定是一头极品屌丝写的,而且是专写给开发屌丝男的智慧枕边书,小女子就委屈一下,勉强看看,人笨,谁让他写得这么通俗易懂呢!为了加深理解, ...

  3. JAVA设计模式 之 策略模式

    一. 定义 设计模式定义了算法族,分别封装起来,让他们之间可以互相替代,此模式让算法的变化独立于使用算法的客户(该定义来自于Head First 设计模式). 二. 应用场景 当我们在应用程序中完成一 ...

  4. Java设计模式---Strategy策略模式

    参考于 : 大话设计模式 马士兵设计模式视频 1.场景介绍 购物网站上有一个产品,有三个字段,档次,价格,重量. 有些同学喜欢轻的,有些手头紧,想要便宜的,有些喜欢档次高的. 那么我们为了提高网站用户 ...

  5. 折腾Java设计模式之策略模式

    博客原文地址 简介 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式.简单理解就是一组算法,可以互换,再简单点策略就是封装算法. ...

  6. 23中java设计模式(1)-- 策略模式

    近来不太忙,就打算抽空看下源码补充一下知识,当我看了之后我发现看源码的关键是要弄清楚类之家的关系以及为何要这样的关系,否则如果只看具体的代码那不如去学习会儿算法. 于是就打算从设计模式入手,边学习边记 ...

  7. Java 设计模式之 策略模式

    思维导图: 我们先来看 STRATEGY 设计模式的通俗解释: 跟不同类型的MM约会,要用不同的策略,有的请电影比较好,有的则去吃小吃效果不错,有的去海边浪漫最合适,但目的都是为了得到 MM 的芳心, ...

  8. Java设计模式之策略模式(Strategy)

    前言: 最近一直在学习基于okHttp网络请求,学习的过程中就想起了之前项目中有这么一个需求不同的接口要采用不同的加密方式,比如登录之前要采用RSA加密,登录之后要采用AES加密,当时是采用靠传递一个 ...

  9. java设计模式之策略模式

    策略模式 定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户(大话设计模式). 策略模式UML图   策略模式代码 古代的各种计谋都是一种策略,这次我们 ...

随机推荐

  1. [日常] NOIWC 2018爆零记

    开个坑慢慢更(逃 (然而没准会坑掉?) day 0 大概 $8:30$ 就滚去雅礼了qwq 过去的时候发现并没有人...进报到处楼门的时候还被强行拍照围观了一波OwO 然后就领了HZ所有人的提包和狗牌 ...

  2. Spark ML源码分析之四 树

            之前我们讲过,在Spark ML中所有的机器学习模型都是以参数作为划分的,树相关的参数定义在treeParams.scala这个文件中,这里构建一个关于树的体系结构.首先,以Decis ...

  3. 数据恢复培训资料:BMP文件详解

    BMP是一种与硬件设备无关的图像文件格式,使用非常广.它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BblP文件所占用的空间很大.BMP文件的图像深度可选lbit.4bit.8 ...

  4. JAVA_SE基础——编码规范&代码编写规则

    这次我来给大家说明下编码规范&代码编写规则  ↓ 编码规范可以帮助程序员在编程时注意一些细节问题,提高程序的可读性,让程序员能够尽快地理解新的代码,并帮助大家编写出规范的利于维护的Java代码 ...

  5. WPF 自定义ComboBox样式

    一.ComboBox基本样式 ComboBox有两种状态,可编辑和不可编辑状态.通过设置IsEditable属性可以切换控件状态. 先看基本样式效果: 基本样式代码如下: <!--ComboBo ...

  6. GIT入门笔记(3)- git中的一些概念和原理

    一.git管理过程中所处的4个阶段: 工作目录(workspace) 暂存区(index) 本地仓库(local repository) 远程仓库(remote repository) 二.工作目录+ ...

  7. SpringBoot 分布式session

    SpringBoot 分布式session实现 1. 什么是分布式session 在集群环境中,不得不考虑的一个问题是用户访问产生的session如何处理.如过不做任何处理,用户将出现频繁俸禄的现象, ...

  8. Archaius 原理

    Archaius 原理 Archaius是什么? Archaius提供了动态修改配置的值的功能,在修改配置后,不需要重启应用服务.其核心思想就是轮询配置源,每一次迭代,检测配置是否更改,有更改重新更新 ...

  9. RxJava系列6(从微观角度解读RxJava源码)

    RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作符) RxJava系列4(过滤操作符) RxJava系列5(组合操作符) RxJava系列6(从微观角 ...

  10. Properties文件中文属性读取是乱码问题

    项目当中遇到了需要从Properties文件中读取配置属性的需求,本来是存储的中文转码后的属性,但是考虑到后期更改问题就变成java代码中进行转码,代码如下: Properties pros = ne ...