设计模式:策略

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

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

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

策略设计模式

策略界面:

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/368131.shtml

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

相关文章

css 学习整理

1、 background-attachment :fixed 属性防止背景图片这种滚动,它默认值是 scroll,也就是说,在默认的情况下,背景会随文档滚动2、font-weight 属性设置文本的粗细(关键字 100 ~ 900 为字体指定了 9 级加粗度。如果一个字…

php抓取网页中的内容

以下就是几种常用的用php抓取网页中的内容的方法。1.file_get_contentsPHP代码代码如下:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&g…

本地搭建WordPress (XAMPP环境)

1,XAMPP是一个流行的PHP开发环境,官网下载: https://www.apachefriends.org/zh_cn/index.html 然后安装。 官方介绍:XAMPP是最流行的PHP开发环境 XAMPP是完全免费且易于安装的Apache发行版,其中包含MariaDB、PHP和Pe…

php中的thumb函数,phpcms v9 thumb(缩略图) 函数说明

打开phcmsc/libs/functions/global.func.PHP文件,找到如下代码:$width_t || $height>$height_t) return $imgurl;$newimgurl dirname($imgurl_replace)./thumb_.$width._.$height._.basename($imgurl_replace);if(file_exists($upload_path.$newimgu…

CSS3 选择器——属性选择器

上一节在《CSS3选择器——基本选择器》中主要介绍了CSS3选择器的第一部分,这节主要和大家一起来学习CSS3选择器的第二部分——属性选择器。属性选择器早在CSS2中就被引入了,其主要作用就是对带有指定属性的HTML 元素设置样式。使用CSS3属性选择器&#x…

设计模式:生成器

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

Hadoop(5)--java编写hdfs程序

1、hdfs系统会把用到的数据存储在core-site.xml中由hadoop.tmp.dir指定&#xff0c;而这个值默认位于/tmp/hadoop-${user.name}下面&#xff0c; 由于/tmp目录在系统重启时候会被删除&#xff0c;所以应该修改目录位置。 修改core-site.xml(在所有站点上都修改) <property&g…

oracle10g服务安装图解,Oracle 10G服务器安装图解

Oracle 10G服务器安装图解Oracle 10g 在window 下的安装概述1.数据库概述Oracle 应用服务器 10g 是集成的、基于标准的软件平台&#xff0c;Oracle Application Server 10g 是继 Oracle9i Application Server (Oracle9iAS) Release 2.0 version 9.0.2 和 version 9.0.3 之后的最…

Java 7试用资源

Java 7为完成使用后需要关闭的资源&#xff08;例如文件&#xff0c;流&#xff0c;数据库连接和套接字&#xff09;提供了更好的资源管理。 这种语言构造称为try-with-resources语句。 完成这项工作的机制称为AutoCloseable接口。 Java 7资源类均实现此接口。 该接口的签名如下…

css平行四边形与菱形变换

*以下技巧均源自于Lea Verou所著《CSS Secrets》 平行四边形 平行四边形的构造可以基于矩形通过skew()的变形属性进行斜向拉升得到&#xff08;skew所用的坐标系&#xff0c;纵向是X轴&#xff0c;横向是Y轴&#xff0c;与常见的坐标系相反&#xff09;。 <!DOCTYPE html&g…

redis 启动配置文件加载报错 service redis does not support chkconfig

# chkconfig:2345 90 10 # description:Redis is a persistent key-value database 网上资料 上面的注释的意思是&#xff0c;redis服务必须在运行级2&#xff0c;3&#xff0c;4&#xff0c;5下被启动或关闭&#xff0c;启动的优先级是90&#xff0c;关闭的优先级是10。 附录&…

Android 获取ROOT权限原理解析

一、 概述本文介绍了android中获取root权限的方法以及原理&#xff0c;让大家对android玩家中常说的“越狱”有一个更深层次的认识。二、 Root的介绍1. Root 的目的可以让我们拥有掌控手机系统的权限&#xff0c;比如删除一些system/app下面的无用软件&#xff0c;更换开…

oracle事务提交前更新机制,Oracle 事务机制 批量添加,修改,更新

---------------------------------------------------------------------------------------------2011-12-14编辑-------------------------------------------------------------------------------------------------------------------using (OracleConnection oc new Or…

webpack实用配置

注意&#xff1a;以下内容是在vue-cli脚手架的基础上进行添加&#xff01; 1、单个文件抽离 webpack.base.conf.js里边的webpackConfig{}里边对入口文件进行配置&#xff0c;输入你想要抽离的文件&#xff0c;比如vux这个ui框架很大&#xff0c;很有必要抽离 entry: {app: ./sr…

设计模式:原型

创新设计模式之一是原型设计模式 。 尽管原型是创造模式&#xff0c;但它在概念上与其他模式有所不同。 我的意思是原型在某种意义上创造了自己。 我将在下面解释。 原型模式的所有魔力都基于Java Object的clone&#xff08;&#xff09;方法。 因此&#xff0c;让我们考虑一…

SecureCRT连接AWS EC2云主机密码登录

申请了亚马逊的EC2&#xff0c;要通过ssh 加密钥的形式登录&#xff0c;特别麻烦&#xff0c;而且感觉ssh登录AWS的云主机后好卡&#xff0c;这里是更改成用户名和密码的形式登录云主机&#xff0c;可以通过SecureCRT直接登录 1、首先通过ssh登录到EC2&#xff0c;类似于ssh -i…

母版页

一、母版页简介 使用 ASP.NET 母版页可以为应用程序中的页创建一致的布局。单个母版页可以为应用程序中的所有页&#xff08;或一组页&#xff09;定义所需的外观和标准行为。 母版之所以称为母版&#xff0c;就是将大部分网页上固定内容&#xff0c;比如导航栏&#xff0c;版…

解决python中join路径分隔符跨平台移植性

在Windows中路径分隔符是“\”&#xff0c;而Linux中则是“/”。这样一来&#xff0c;如果我们写了这样一段代码&#xff1a; 1 import os 2 3 print(os.path.join(C:\\, a, b.txt)) 在Windows中运行时是没有问题的&#xff0c;但是在Linux当中就有问题了&#xff0c;反之亦然…

现代网络开发

在过去的几年中&#xff0c;网络技术经历了快速增长和重大变化。 我们从框架到表格布局&#xff0c;再到列布局&#xff0c;再到响应式布局。 从html4到xhtml和Flash到html5。 从重型服务器到富客户端。 从rpc到肥皂休息。 从sql到nosql和大数据。 从MVC到MVP等。 在以下文章中…

php脚本来创建一个表,PHP - SQL脚本创建器

我需要的&#xff1a;一个高效的SQL脚本生成器来替换下面的。的背景。一个非常简单的程序&#xff0c;但我需要一个更有效的方式来生成它&#xff0c;我有这个代码的原因是我需要其他开发人员能够在我的平台和数据库表上创建“模块”&#xff0c;但我阻止他们拥有完全访问权限到…