工厂设计模式和策略设计模式_设计模式:策略

工厂设计模式和策略设计模式

这次我想谈谈策略设计模式 。 通过这种方式,我开始撰写有关行为设计模式的文章。 这种模式表示对象之间的某些交互模式,以使代码更灵活且组织得更好。此方法的最本质点是对象之间的松散耦合。

当您的应用程序中有多个实现目的的实现时,应使用该策略。 在这种情况下,您将创建策略接口,接口的具体实现以及最终一个上下文类,该上下文类将以某些方法封装所有逻辑。 为了理解这种方法,让我们看一个例子。

该示例将基于足球。 让我们想象一下,任何一支足球队都能以两种方式比赛:进攻和防守。 这两种策略是足球策略的特殊实现。

策略设计模式

策略界面:

public interface FootballStrategy {public void adhereTactic(String team);}

具体实现:

public class AttackTactic implements FootballStrategy {@Overridepublic void adhereTactic(String team) {System.out.println(team+" will play in attacking football!");}}

public class DefenceTactic implements FootballStrategy {@Overridepublic void adhereTactic(String team) {System.out.println(team+" will make emphasis on defence!");}}

上下文类:

public class TacticContext {private FootballStrategy strategy = null;public void selectTactic(String team) {strategy.adhereTactic(team);}public FootballStrategy getStrategy() {return strategy;}public void setStrategy(FootballStrategy strategy) {this.strategy = strategy;}}

演示策略用法:

...public static void main(String[] args) {String team1 = "Barcelona";String team2 = "Real Madrid";TacticContext context = new TacticContext();context.setStrategy(new AttackTactic());context.selectTactic(team1);context.setStrategy(new DefenceTactic());context.selectTactic(team2);}
...

代码执行的结果:

巴塞罗那将参加进攻足球比赛!
皇马会强调防守!

何时使用策略设计模式? 绝对是当客户不需要了解具体策略的实施或那里使用的数据时。 当您要动态使用集合中的一个类时。 我不知道现在还需要提及哪些情况。 但是我确信我的例子很冗长,您可以对策略设计模式的利弊做出自己的结论。

参考: 设计模式: JCG合作伙伴 Alexey Zvolinskiy在Fruzenshtein的便笺博客中提出的策略。

翻译自: https://www.javacodegeeks.com/2013/06/design-patterns-strategy.html

工厂设计模式和策略设计模式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/348401.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何将不带web.xml的Spring应用程序部署到Tomcat

介绍 由于Servlet 3规范不再需要web.xml来配置Web应用程序,因此已通过使用注释代替。 在本文中,我们将研究如何在不使用web.xml情况下将简单的基于Spring的应用程序部署到Tomcat 8.5。*。 创建一个空的应用程序 使用以下命令使用maven webapp原型创建一…

Python和Java结合的项目实战_[项目实战] Python高级教程项目实战篇 Python和Java结合的项目实战 视频教程 [...

资源介绍课程简介:xa0xa0Python高级教程项目实战篇 Python和Java结合的项目实战 视频教程 教学视频----------------------课程目录Python项目实战篇[初级项目:图片社交电商导购漂流瓶]项目实现功能: 用户注册,登录,登出图片的多种…

设计模式 建造者模式_设计模式:建造者

设计模式 建造者模式有时需要在应用程序中创建一个复杂的对象。 一种解决方案是Factory模式,另一种是Builder设计模式。 在某些情况下,您甚至可以结合使用这两种模式。 但是在本文中,我想研究一下Builder设计模式 。 我需要说的第一件事是创造…

在MongoDB和Spring Batch中将XML转换为JSON和原始使用

总览 为什么将XML转换为JSON以在MongoDB中原始使用? 由于MongoDB使用JSON文档存储记录,就像表和行将记录存储在关系数据库中一样,我们自然需要将XML转换为JSON。 某些应用程序可能需要存储原始(未修改的)JSON&#xf…

java 垃圾回收手动回收_Java垃圾回收(1)

java 垃圾回收手动回收这是有关垃圾收集(GC)的系列文章中的第一篇。 我希望能够涵盖整个系列过程中的理论知识以及热点虚拟机中的所有主要收集器。 这篇文章仅说明什么是垃圾回收以及不同回收器共有的元素。 我为什么要在乎? 您的Java虚拟机…

使用Apache Isis快速进行SEMAT应用程序开发

TL; DR这篇文章谈论我使用Apache Isis创建并部署到此处的OpenShift Online的SEMAT宠物项目: http: //semat.ofbizian.com Apache Isis 作为主要在后端系统上工作的Java开发人员,我讨厌创建用户界面和处理Java脚本。 幸运的是,有J…

java 对象锁定_少锁定Java对象池

java 对象锁定自从我写任何东西以来已经有一段时间了,我一直在忙于我的新工作,其中涉及在性能调优方面做一些有趣的工作。 挑战之一是减少应用程序关键部分的对象创建。 尽管Java随着时间的推移已改进了GC算法,但垃圾回收打ic一直是Java的主…

Oracle JDBC中的PreparedStatement占位符过多

使用Oracle数据库时,导致ORA-01745(“无效的主机/绑定变量名称错误”)错误的原因有多种。 关于错误ORA-01500到ORA-02098的Oracle 9i文档提供了有关ORA-01745的更多详细信息。 它指出,“原因”是“绑定变量或INTO规范中的冒号后跟…

webview加载php文件,HYWebview下载自定义文件教程

车机版 HYWebview升级到1.3了多增加了一个进度条多增加了自定义下载URL功能使用教程。浏览器打开DNS地址:103.44.248.95可见 底部有一个 下载链接 和 提货密码 可以输入!比如 我们去应用宝官网复制下载链接出来:https://download.sj.qq.com/u…

设计模式 原型模式_设计模式:原型

设计模式 原型模式创新设计模式之一是原型设计模式 。 尽管原型是创造模式,但它在概念上与其他模式有所区别。 我的意思是原型在某种意义上创造了自己。 我将在下面解释。 原型模式的所有魔力都基于Java Object的clone()方法。 因此&#x…

Packt和Java Code Geeks提供的$ 5 Java编程书籍!

您好极客! 今天,我们为您带来一些激动人心的消息! Java Code Geeks和Packt联手为您提供广泛的书籍库每周折扣。 对于开发人员来说,Java仍然是最强大的选择之一,它是定义企业和移动设备的语言。 本周,我们…

源码时代php中级项目,0526PHP班中级项目评比圆满落幕

为了充分发掘同学们开发项目的成功经验,全面提升学员的综合素质,锻炼学员的解说与问题处理能力,源代码教育(源码时代)重庆校区进行了PHP就业班的中级项目评比。项目评比分为演讲、质询、点评及投票评分几个环节,每个环节都精彩纷呈…

qt linux 添加库文件路径,linux下qt使用第三方库的那些事

开发库查看工具:$sudo apt-get install pkg-config很多时候我们并不知道自己电脑有没有这个库,所以我们可以使用这个工具来查看自己有哪些工具,或者哪些工具没有。同时,qmake是对这个工具配置支持的,所以我们很多时候很…

xp系统上安装linux系统教程,XP系统如何安装fedora linux双系统?WinXP安装fedora linux双系统的方法...

有位朋友因为想在linux中熟悉下hadoop的配置开发环境,所以就开始于WinXP系统中安装fedora linux双系统,可是操作了很久都没成功。这该如何怎么办呢?接下来,小编就给大家介绍WinXP安装fedora linux双系统的具体方法。1.下载Fedora-…

pae扩展内存 linux,Linux内核-内存管理-PAE(物理地址扩展)

Intel 通过在处理器上把管脚数从 32 增加到 36,以提高处理器的寻址能力,使其达到 2^3664GB,然而线性地址的位数仍然是 32 位,为此,需引入一种新的分页机制。从pentium pro 处理器开始,intel引入一种叫做 PA…

java嵌入式db_Java DB嵌入式模式

java嵌入式dbJava DB是基于Java编程语言和SQL的关系数据库管理系统。 这是Apache软件基金会的开源Derby项目的Oracle版本。 Java SE 7 SDK中包含Java DB。 Java DB有两个部署选项: Embedded和Network Server 。 这篇文章是关于嵌入式部署或模式的。 1.嵌入式 在嵌…

群晖备份linux分区,数据丢失的后悔药,群晖NAS备份方案详解

“秒速开机”——据说90%的人都是因为这句话而知道的SSD固态硬盘。相比于机械硬盘,SSD固态硬盘开机快、关机快、打开软件快、载入数据快、拷贝快、删除也快——既快乐、又爽快,更是大块人心!然而,SSD固态硬盘已经可以完全取代机械硬盘了吗&am…

tg3269c网卡驱动linux,TP-Link3269C网卡驱动官方版

TG-3269C驱动是一款能够安装于由普联发布的无线网卡驱动,通过此安装驱动我们手机和其他无线设备才能连接上无线网卡并进行上网,同时如果你的网卡经常出现断开和重连、网络不稳定等情况可以通过重新安装驱动,查看是否是硬件的问题,…

使用Spring Security,Thymeleaf和Okta保护Java应用程序的安全

永不再构建身份验证 –喜欢构建用户管理? 使用Okta,您可以在几分钟内为您的应用程序添加社交登录,多因素身份验证和OpenID Connect支持。 立即创建一个免费的开发者帐户。 在构建Java应用程序时,用户管理是至关重要的考虑因素。 …

红旗linux添加usb无线网卡,在Ubuntu 8.10中安装无线网卡RTL8187SE驱动

本人的笔记本是微星的Wind U90,自带的无线网卡是RTL8187SE。这款无线网卡在一般的Linux下是没有驱动的,微星的官方也仅仅提供在OpenSUSE下的驱动。为了在我的Ubuntu下使用这个网卡,只能自己动手了。还好,有了互联网上各位大侠和微…