else 策略模式去掉if_java – 用状态/策略模式替换if/else逻辑

我认为你应该使用GoF模式

Chain of responsibility.你应该引入两个接口:1)你将检查正确条件的条件,例如“如果zip文件不存在”并返回布尔结果 – 如果条件满足则返回“true”,否则“else”,2)执行策略,它将运行分配有条件的动作,例如: “从指定的URL下载它然后解压缩并读入文件并将zip文件移动到指定的目录.”因此,第一个界面将回答“何时”,第二个 – “然后”. “条件”实现和“执行策略”实现应该组合成“元组”(或对,条目等).这个“元组”应该按照你所描述的顺序移动到集合中.然后,当您需要处理zip文件时,您将迭代收集,调用条件和检查结果,如果结果为“true”,则调用适当的“执行策略”.此外,条件可以与执行策略结合,并通过两种方法转移到单个接口/实现中.上下文,将描述zip文件的当前状态,可以在条件/执行策略之间传递.

希望这可以帮助.

更新.

代码示例(在Java中).

/**

* All implementations should check proper condition

*/

interface Condition {

/**

* Check if condition is satisfied

*

* @param pathToFile path to target file

* @return 'true' if condition is satisfied,otherwise 'false'

*/

boolean isSatisfied(String pathToFile); //i've made an assumption that you'll manipulate file path for checking file

}

...

/**

* Childs will wrap some portion of code (if you'll use language,that supports lambdas/functors,this interface/implementation can be replaced with lambda/functor)

*/

interface Action {

/**

* Execute some portion of code

*

* @param pathToFile path to target file

*/

void execute(String pathToFile);

}

...

class ZipFileExistsCondition implements Condition {

@Override

public boolean isSatisfied(String pathToFile) {

... //check if zip file exists

}

}

...

class ZipFileDoesNotExists implements Condition {

@Override

public boolean isSatisfied(String pathToFile) {

... //download zip file and move it to some temp directory

//if file downloaded ok,than return 'true' otherwise 'false'

}

}

...

class AlwaysSatisfiedCondition implements Condition {

@Override

public boolean isSatisfied(String pathToFile) {

... //always returns 'true',to run action assigned with this condition

}

}

...

Collection> steps = Arrays.asList(

new AbstractMap.ImmutableEntry(new ZipFileExistsCondition(),new Action() { /*move zip file to zip file directory and read in file*/ }),new ZipFileDoesNotExists(),new Action() { /*download it from specified URL and then unzip it and read in file and move zip file to specified directory*/ },new AlwaysSatisfiedCondition(),new Action() { /*create blank file and write it out to disk*/ }

);

...

String pathToFile = ...

...

for(Map.Entry step: steps) {

if(!step.getKey().isSatisfied(pathToFile))

continue;

step.getValue().execute(pathToFile);

}

备注:

1)您可以将’Condition’实现为匿名类,

2)’AlwaysSatisfiedCondition’可以是单身,

3)如果你使用的是Java / Groovy / Scala,你可以使用Guava / Apache Commons的’Predicate’而不是’Condition’,’Function’或’Closure’而不是’Action’.

如果您需要在第一个’满意’条件和适当的操作执行后退出,那么只需在执行动作后放入’break’/’return’.

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

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

相关文章

docker简介与搭建

1 . 对docker的理解: Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间…

Java BigInteger类| toByteArray()方法与示例

BigInteger类testBit()方法 (BigInteger Class testBit() method) testBit() method is available in java.math package. testBit()方法在java.math包中可用。 testBit() method is used to convert this BigInteger to a byte [] that holds 2s complement denotation of thi…

007_Web to lead

转载于:https://www.cnblogs.com/bandariFang/p/6229491.html

设置header_Nginx的这些安全设置,你都知道吗?

Nginx 是最流行的 Web 服务器,可以只占用 2.5 MB 的内存,却可以轻松处理 1w 的 http 请求。做为网站的入口,Nginx 的安全设置重要性不言而喻。下面带你一起去认识一下这些安全配置吧!nginx.conf是 Nginx 最主要的配置文件&#xf…

动态路由协议_动态路由协议的类别

动态路由协议Dynamic routing protocols have been divided into 2 categories i.e Distance vector protocols and Link state protocols. Both of these protocols are being explained in detail in this tutorial. 动态路由协议分为距离矢量协议和链路状态协议两大类 。 本…

docker镜像创建与优化

1 . 创建镜像 有两种方法构建镜像: docker commit :将运行的容器保存成镜像Dockerfile:自动构建 使用docker commit 创建镜像分为三步: 运行容器修改容器将容器保存为镜像 举例: [rootdocker ~]# docker load -i…

ISP运营商实验室测试机架拓扑搭建经验分享

大家好,有些日子没更新干货了,近期难得有假期进行修整,思前顾后还是坐下来聊聊自己长期负责维护和搭建的实验室环境。废话不多说,直接上图。因为图较大,分上下部分进行上传。网络主框架(上)服务…

关于二手交易用户指南怎么写_让用户拍案叫绝文案怎么写?试试这3个方法

“共鸣”到底是什么? 为什么有些文章会引起共鸣,而有些则没有。现在假设为产品家用手持式美容仪写一份副本。 由于主要重点是“家庭使用”,因此您立即想到了“家庭美容”的口号。 尽管这句话很简单易懂,但谈论起来总是很简单……似…

结构化程序goto语句_C ++ goto语句| 查找输出程序| 套装1

结构化程序goto语句Program 1: 程序1&#xff1a; #include <iostream>#include <math.h>using namespace std;int main(){int num1 1;int num2 0;MY_LABEL:num2 num1 * num1;cout << num2 << " ";num1 num1 pow(2, 0);if (num1 < …

docker仓库搭建、加密、用户认证

1 . 含义及理解&#xff1a; 仓库分为公开仓库&#xff08;Public&#xff09;和私有仓库&#xff08;Private&#xff09;两种形式。最大的公开仓库是 Docker Hub&#xff0c;存放了数量庞大的镜像供用户下载。 国内的公开仓库包括 Docker Pool等&#xff0c;可以提供大陆用户…

Centos7+Nginx+Keepalived实现Apache服务的高可用负载均衡

Centos7NginxKeepalived实现Apache服务的高可用&负载均衡今天是2017年的第一天&#xff0c;昨天也就是2016年的最后一天&#xff0c;我尝试部署了Centos7NginxKeepalived实现WEB服务的高可用负载均衡服务&#xff0c;终于在2017年的第一天前完成了&#xff0c;所以在此分享…

客户端通过网口启动可过去的ip_西安交通大学16年3月课程考试《网络组网技术综合训练》作业考核试题...

西安交通大学16年3月课程考试《网络组网技术综合训练》作业考核试题一、单选题(共 20 道试题&#xff0c;共 40 分。)V 1. 下列不属于服务器内部结构的是()A. CPUB. 电源C. 5类双绞线D. 北桥芯片满分&#xff1a;2 分2. 网络中使用光缆的优点是()A. 便宜B. 容易安装C. 是一个工…

mcq 队列_MCQ | 软件工程基础知识/简介(1)

mcq 队列Q1. Which of the following is a part of the software? Q1。 以下哪个是软件的一部分&#xff1f; Programs 程式 Documentation 文献资料 Operating Procedures 运营流程 All of the above 上述所有的 Answer: d. All of the above 答案&#xff1a; d。 上述所有…

docker设置镜像加速器

设置镜像加速器 一般情况下&#xff0c;直接从官方仓库中直接拉取镜像会比较慢&#xff0c;可以设置镜像加速器&#xff0c;相当于一个反向代理。以阿里云为例 1 . 首先获取自己的加速器地址 www.aliyun.com 登陆自己的账号&#xff08;可以是支付宝账号&#xff09; 首页点…

keytool条目_java keytool 常用命令

最近在做ssl连接active directory&#xff0c; 遇到了不少的ssl的问题。连接ssl时会需要用将证书保存到keystore&#xff0c; 而这个步骤刚好就用到了keytool命令。直接敲keytool会有提示如何用这个命令&#xff0c; 但对于完全不懂的我&#xff0c;还是找了下基本命令&#xf…

用JavaScript中的示例进行fill()函数

fill() is a predefined function in JavaScript, which is used to fill all elements of an array with a static value. fill()是JavaScript中的预定义函数&#xff0c;用于用静态值填充数组的所有元素。 Example: 例&#xff1a; <html><head><title>J…

谈谈重载(overload)覆盖(override)与隐藏

这三个概念都是与OO中的多态有关系的。如果单是区别重载与覆盖这两个概念是比较容易的&#xff0c;但是隐藏这一概念却使问题变得有点复杂了&#xff0c;下面说说它们的区别吧。重载是指不同的函数使用相同的函数名&#xff0c;但是函数的参数个数或类型不同。调用的时候根据函…

搭建Harbor私有仓库

1 首先装好docker&#xff1a; 由于之前已安装过&#xff0c;所以直接开起就行 2 . 安装python2.7以上版本 之前编译安装过7.3的&#xff0c;直接用吧 3 . 安装docker-compose docker容器管理工具&#xff0c;是habor的依赖之一。 curl -L "https://github.com/docker…

mysql日志查询指令_MySQL查询日志总结

MySQL查询日志介绍MySQL的查询日志记录了所有MySQL数据库请求的信息。无论这些请求是否得到了正确的执行。默认文件名为hostname.log。默认情况下MySQL查询日志是关闭的。生产环境&#xff0c;如果开启MySQL查询日志&#xff0c;对性能还是有蛮大的影响的。另外很多时候&#x…

thinkphp5.0助手函数占用服务器资源

db(user) 默认情况下&#xff0c;每次请求都会重新连接数据库&#xff0c;这样会占用服务器资源 方法1.如果不想每次都重连可以这样 db("List",[],false) 方法2.还可以直接改function&#xff0c;及则需要把 function db($name , $config [], $force true){retu…