Java 策略模式(Strategy)
创建一个能够根据所传递的参数对象的不同而具有不同行为的方法
要执行的算法固定不变,封装到一个类(Context)中
策略就是传递进去的参数对象,它包含执行代码
策略接口
/**
* 策略接口
*/
public interface IStrategy {
String name();
/**
* 具体逻辑(算法)
* @param str
* @return
*/
String Arithmetic(String str);
}
- 具体实现
public class Downcase implements IStrategy {
public String name() {
return getClass().getSimpleName();
}
public String Arithmetic(String str) {
return str.toLowerCase();
}
}
public class UpCase implements IStrategy {
public String name() {
return getClass().getSimpleName();
}
public String Arithmetic(String str) {
return str.toUpperCase();
}
}
public class Splitter implements IStrategy {
public String name() {
return getClass().getSimpleName();
}
public String Arithmetic(String str) {
return Arrays.toString(str.split(" "));
}
}
- 封装逻辑(算法)
/**
* 策略模式通过组合的方式实现具体算法
* 其要执行的算法不变,封装到一个类(Context)中
*/
public class Context {
private IStrategy mStrategy;
/**
* 将抽象接口的实现传递给组合对象
* @param strategy
*/
public Context(IStrategy strategy){
this.mStrategy = strategy;
}
/**
* 封装逻辑(算法)
* @param s
*/
public void doAction(String s){
System.out.println(mStrategy.name());
System.out.println(this.mStrategy.Arithmetic(s));
}
}
- 测试
public static String s="Disagreement with beliefs is by definition incorrect";
public static void main(String[] args){
IStrategy is = new UpCase();
Context c = new Context(is);
c.doAction(s);
IStrategy isd = new Downcase();
Context c2 = new Context(isd);
c2.doAction(s);
IStrategy iss = new Splitter();
Context c3 = new Context(iss);
c3.doAction(s);
}
Java 策略模式(Strategy)的更多相关文章
- Java策略模式(Strategy模式) 之体验
<JAVA与模式>之策略模式 在阎宏博士的<JAVA与模式>一书中开头是这样描述策略(Strategy)模式的: 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法 ...
- Java策略模式(Strategy)
一.定义 定义一组算法,将每个算法都封装起来,并且使它们之间可以互换.策略模式使这些算法在客户端调用它们的时候能够互不影响地变化.(Java的TreeSet集合中,构造方法可传入具体的比较器对象以实现 ...
- 策略模式-Strategy(Java实现)
策略模式-Strategy 在策略模式中,一个类(策略使用者)可以更改自己的执行策略. 比如以排序算法为例子, 多种排序算法都归属于排序算法, 但是实现的算法细节不同, 使用者可以很轻松地替换策略, ...
- Java 设计模式系列(十二)策略模式(Strategy)
Java 设计模式系列(十二)策略模式(Strategy) 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以 ...
- JAVA设计模式之策略模式 - Strategy
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式. 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 ...
- 设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)
在前段时间呢陆陆续续的更新了一系列关于重构的文章.在重构我们既有的代码时,往往会用到设计模式.在之前重构系列的博客中,我们在重构时用到了“工厂模式”.“策略模式”.“状态模式”等.当然在重构时,有的地 ...
- 【转】设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成 ...
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕 ...
- 设计模式 - 策略模式(Strategy Pattern) 具体解释
策略模式(Strategy Pattern) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26577879 本文版权全 ...
随机推荐
- Vue复选框的全选
<!DOCTYPE html><html> <head> <meta charset="utf-8"> ...
- python 爬虫--同花顺-使用代理
1.http://www.goubanjia.com/ 在上面获取 使用http协议的公网IP和端口 参考:https://blog.csdn.net/qq_23934063/article/det ...
- 理解ASP.NET的IDataReader
理解ASP.NET的IDataReader ADO.NET DataReader对象可以从数据库中检索只读.只进的数据流.因为每次在内存中的数据只有一行,所以使用DataReader可提高应用程序的性 ...
- c# speech 文本转语言
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...
- 20155233 《网络对抗》 Exp5 MSF基础应用
主动攻击:ms08_067漏洞攻击 启用msf终端msfconsole然后使用search命令搜索该漏洞对应的模块:search ms08_067 选择输入use exploit/windows/sm ...
- WPF编程,C#中对话框自动关闭的一种方法。
原文:WPF编程,C#中对话框自动关闭的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/details/8 ...
- WPF的Style的TargetType不同写法的异同
原文:WPF的Style的TargetType不同写法的异同 <Style TargetType="TextBlock"> <Setter Property=&q ...
- Selenium之前世今生
前世 Selenium RC 早期的Selenium使用的是JavaScript注入技术与浏览器打交道,需要Selenium RC启动一个Server,将操作Web元素的API调用转化为一段段Java ...
- ASP.NET多行文本框限制字符个数
asp.net中TextBox当设置TextMode = Multiline时,其MaxLength属性无效.可使用JS进行辅助限制输入的字符个数.中文算两个字符,西文算1个字符. TextBox属性 ...
- ECMAScript6——异步操作之Promise
Promise对象的参数为一个回调函数,这个回调函数有两个参数,分别是resolve, reject(这俩参数的名字可任取),resolve,reject分别表示异步操作执行成功后的回调函数和异步操作 ...