Java设计模式之策略设计模式
1.什么是-策略设计模式
2.策略设计模式的优缺点
1.1优点
1.1.1.可以动态的改变对象的行为
1.1.2.分离业务逻辑实现和需求
1.2缺点
1.2.1.客户端必须知道所有的策略类,并自行决定使用哪一个策略类
1.3.2.策略模式将造成产生很多策略类
2.设计模式示例
2.1.示例背景
这里的示例是以小明和女朋友出去旅游选择交通工具做背景,之前设计模式职责链的时候小明已经请假相亲,结婚啥的都已经做完了,结完婚是不是该出去度蜜月了。一天小明决定去马尔代夫度蜜月,然后选择交通方式的时候犯愁了,小明是一位选择性强迫症的人,他在考虑是坐汽车还是火车还是飞机呢。他决定吧这三个想法告诉他的老婆小红,让小红来决定(Context类来充当这个角色)。三个交通工具类分别是:Aircraft-飞机,Automobile-汽车,Train-火车,每一种交通工具的最终目的都是为了出行,所以定义一个抽象类Travel 并定义抽象方法TravelInterface让三个交通工具实现该方法
2.2.代码区域
2.2.1.创建抽象类Travel 定义抽象方法
/**
* 出行抽象类
*/
public abstract class Travel {
/**
* 出行抽象的公共接口方法
*/
public abstract void TravelInterface();
}
2.2.2.创建火车类并实现抽象Travel 类
/**
* 火车类
*/
public class Train extends Travel {
@Override
public void TravelInterface() {
System.out.println("我选择乘坐火车去旅游"); }
}
2.2.3.创建汽车类并实现抽象Travel 类
/**
* 汽车类
*/
public class Automobile extends Travel {
@Override
public void TravelInterface() {
System.out.println("我选择乘坐汽车去旅游");
}
}
2.2.4.创建飞机类并实现抽象Travel 类
/**
* 飞机类
*/
public class Aircraft extends Travel {
@Override
public void TravelInterface() {
System.out.println("我选择乘坐飞机去旅游");
}
}
2.2.4.创建实现抽象出行的实现类-小明的媳妇
/**
* 控制中心
*/
public class Context {
public void setStrategy(Travel strategy) {
this.strategy = strategy;
} private Travel strategy; public Context(Travel strategy) {
this.strategy = strategy;
} public void TravelInterface(){
this.strategy.TravelInterface();
}
}
2.2.5.创建小明测试类
/**
* 出行选择对应的出行方式
*/
public class TourismTest {
public static void main(String args[]) {
Context context=null;
context=new Context(new Aircraft());/*通过传递某个出行对象来决定真正出行的交通工具*/
context.TravelInterface();
context=new Context(new Train());
context.TravelInterface();
context=new Context(new Automobile());
context.TravelInterface();
}
}
执行思路总结:从实例中可以看出来优缺点的确很明显,本身出行的交通工具都是可以划分为交通工具类的,只是动作方法实现不同,这也就是缺点策略模式将造成产生很多策略类。有没有发现策略模式和职责链模式有几分相似之处。这里小明发起请求最终再交给小红来实现,小红就是Context 这个类。
Java设计模式之策略设计模式的更多相关文章
- JAVA学习笔记--策略设计模式与适配器模式
一.策略设计模式 创建一个能够根据所传递对象的不同而具有不同行为的方法被称为策略设计模式:这类方法包含所要执行的算法中固定不变的部分,而“策略”包含变化的部分.策略就是传递进去的参数对象,它包含要执行 ...
- java中的策略设计模式
本文主要讲java中的策略模式:一个可以根据不同的传入参数而具有不同行为的方法,就叫策略模式.概念可能有点不好理解,具体看下面代码: import java.util.Arrays; /** * 策略 ...
- java接口应用—策略设计模式
策略模式:定义了一系列算法,将每一种算法封装起来并可以相互替换使用,策略模式让算法独立于使用它的客户应用而独立变化 strategy pattern:The Strategy Pattern defi ...
- Java(Android)编程思想笔记02:组合与继承、final、策略设计模式与适配器模式、内部类、序列化控制(注意事项)
1.组合和继承之间的选择 组合和继承都允许在新的类中放置子对象,组合是显式的这样做,而继承则是隐式的做. 组合技术通常用于想在新类中使用现有类的功能而非它的接口这种情形.即在新类中嵌入某个对象,让其实 ...
- java策略设计模式
1.概述 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们可以相互替换,让算法独立于使用它的客户而独立变化. 其实不要被晦涩难懂的定义所迷惑,策略设计模式实际上就是定义一个接口,只要实现 ...
- java 策略设计模式
在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能.如查找.排序等,一种常用的方法是硬编码(Hard Coding)在 ...
- 从追MM谈Java的23种设计模式(转)
从追MM谈Java的23种设计模式 这个是从某个文章转载过来的.但是忘了原文链接.如果知道的,我追加一下. 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西 ...
- 黑马程序员——JAVA基础之简述设计模式
------- android培训.java培训.期待与您交流! ---------- 设计模式(Design Patterns) 设计模式(Design pattern)是一套被反复使用.多数人知晓 ...
- JAVA:23种设计模式详解(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
随机推荐
- ASP.NET Core的身份认证框架IdentityServer4(5)- 包和构建
包和构建 IdentityServer有许多nuget包 IdentityServer4 nuget | github 包含IdentityServer核心对象模型,服务和中间件. 仅支持内存配置和用 ...
- ldap数据库--ODSEE--安装
在安装之前最好查看一下服务器硬件是否满足要求,是否需要更改一些系统配置来达到使用ldap数据库的最有性能.实际使用的ldap数据库是oracle的产品,DS70即ODSEE. 安装环境:solaris ...
- python+selenium安装
1.下载Python 请到官网自行下载安装https://www.python.org/downloads/ 在安装的时候,注意一定要勾上这个选项,可以免去我们配置系统变量的麻烦,如果你忘了,没关系, ...
- 动态创建 script 实现跨域请求数据
动态创建script标签 (由事件触发) 在我们需要请求数据的时候我们就可以动态的创建 script 标签 src设置为我们需要请求数据的地址 另外我们可以附加参数 ?后面附加参数 例如 :?参数=1 ...
- Visual Studio 2017开发环境的安装
Visual Studio 2017是微软为了配合.NET战略推出的IDE开发环境,同时也是目前开发C#程序最新的工具,本节以Visual Studio 2017社区版的安装为例讲解具体的安装步骤. ...
- 原生js绑定和解绑事件,兼容IE,FF,chrome
主要是最近项目中用到了原生的js 解绑和绑定 事件 然后今天研究了一下,其实问题不大,不过要注意不要把单词写错了,今天我就找了好久单词写错了. 需求:当鼠标移上去以后,给Select加载元素,接着解 ...
- Python之程序执行时间计算
import datetime starttime = datetime.datetime.now() #long running endtime = datetime.datetime.now() ...
- centos安装maven,git,mysql
安装maven1:下载maven包:http://mirror.bit.edu.cn/apache/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bi ...
- 【手记】让Fiddler抓取入站请求,或者叫用Fiddler做反向代理
注意:本文不涉及HTTPS的场景 最近在弄公众号开发,除了主动去调公众号接口,还存在公众号后台要反过来调你的情形,攻受转换一线间.对于回调的情况,想要知道对方是怎样来请求的很有必要.此前经常用Fidd ...
- [最短路]P1828 香甜的黄油 Sweet Butter
题目描述 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油.当然,他将付出额外的费 ...