查看“策略模式”的源代码
←
策略模式
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看和复制此页面的源代码。
IStrategy.java<syntaxhighlight lang="java"> public interface IStrategy { public void operate(); } </syntaxhighlight>BackDoor.java<syntaxhighlight lang="java"> /** * 乔国老开后门 */ public class BackDoor implements IStrategy { @Override public void operate() { System.out.println("找乔国老帮忙,让吴国太给孙权施加压力"); } } </syntaxhighlight>GivenGreenLight.java<syntaxhighlight lang="java"> /** * 吴国太开绿灯 */ public class GivenGreenLight implements IStrategy { @Override public void operate() { System.out.println("求吴国太开绿灯,放行!"); } } </syntaxhighlight>BlockEnemy.java<syntaxhighlight lang="java"> /** * 孙夫人断后 */ public class BlockEnemy implements IStrategy { @Override public void operate() { System.out.println("孙夫人断后,挡住追兵"); } } </syntaxhighlight>Context.java<syntaxhighlight lang="java"> /** * 锦囊 */ public class Context { private IStrategy strategy; public Context(IStrategy strategy) { this.strategy = strategy; } public void operate() { this.strategy.operate(); } } </syntaxhighlight>ZhaoYun.java<syntaxhighlight lang="java"> public class ZhaoYun { /** * @param args */ public static void main(String[] args) { Context context; //刚刚到吴国的时候拆一个 System.out.println("---刚刚到吴国的时候拆第一个---"); context = new Context(new BackDoor()); //拿到妙计 context.operate(); //拆开执行 System.out.println("\n\n\n\n\n\n"); System.out.println("---刘备乐不思蜀了,拆第二个了---"); context = new Context(new GivenGreenLight()); //拿到妙计 context.operate(); //执行了第二个锦囊 System.out.println("\n\n\n\n\n\n"); System.out.println("---孙权的小兵追来了,咋办?拆第三个---"); context = new Context(new BlockEnemy()); context.operate(); System.out.println("\n\n\n\n\n"); } } </syntaxhighlight> ==== 策略模式的定义 ==== Define a family of algorithms, encapsulate each one, and make them interchangeable. 定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。 策略模式使用的就是面向对象的继承和多态机制,策略模式主要有三个角色: * Context 封装角色,也叫作上下文角色,起承上启下封装作用,屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化。 * Strategy 抽象策略角色,策略、算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性。 * ConcreteStrategy 具体策略角色,实现抽象策略中的操作,该类还有具体的算法。 === 策略模式的通用源码 === Strategy.java<syntaxhighlight lang="java"> public interface Strategy { //策略模式的运算法则 public void doSomething(); } </syntaxhighlight>ConcreteStrategy1.java<syntaxhighlight lang="java"> public class ConcreteStrategy1 implements Strategy { @Override public void doSomething() { System.out.println("具体策略1的运算法则"); } } </syntaxhighlight>ConcreteStrategy2.java<syntaxhighlight lang="java"> public class ConcreteStrategy2 implements Strategy { @Override public void doSomething() { System.out.println("具体策略2的运算法则"); } } </syntaxhighlight>Context.java<syntaxhighlight lang="java"> /** * 封装角色 */ public class Context { //抽象策略 private Strategy strategy = null; //构造函数设置具体策略 public Context(Strategy _strategy) { this.strategy = _strategy; } //封装后的策略方法 public void doAnything() { this.strategy.doSomething(); } } </syntaxhighlight>Client.java<syntaxhighlight lang="java"> public class Client { /** * @param args */ public static void main(String[] args) { //声明一个具体策略 Strategy strategy = new ConcreteStrategy1(); //声明上下文对象 Context context = new Context(strategy); //执行封装后的方法 context.doAnything(); } } </syntaxhighlight>
返回至
策略模式
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
Spring Boot 2 零基础入门
Spring Cloud
Spring Boot
设计模式之禅
VUE
Vuex
Maven
算法
技能树
Wireshark
IntelliJ IDEA
ElasticSearch
VirtualBox
软考
正则表达式
程序员精讲
软件设计师精讲
初级程序员 历年真题
C
SQL
Java
FFmpeg
Redis
Kafka
MySQL
Spring
Docker
JMeter
Apache
Linux
Windows
Git
ZooKeeper
设计模式
Python
MyBatis
软件
数学
PHP
IntelliJ IDEA
CS基础知识
网络
项目
未分类
MediaWiki
镜像
问题
健身
国债
英语
烹饪
常见术语
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息