目录

一、引言:

二、概述:

三、举例:

“简单工厂”:

依赖倒置:

四、问题来了

五、在spring中


一、引言:

设计模式的六大原则有:

Single Responsibility Principle:单一职责原则
Open Closed Principle:开闭原则
Liskov Substitution Principle:里氏替换原则
Law of Demeter:迪米特法则
Interface Segregation Principle:接口隔离原则
Dependence Inversion Principle:依赖倒置原则
把这六个原则的首字母联合起来(两个 L 算做一个)就是 SOLID (solid,稳定的)。六大原则是设计模式的基石,这篇文章中,我们来看一下依赖倒置原则。

二、概述:

依赖倒置原则是:

1、高层模块不应该依赖低层模块。两个都应该依赖抽象;

2、抽象不应该依赖细节。细节应该依赖抽象;

 

三、举例:

以《大话设计模式》中,大鸟要求小菜实现计算机加减乘除功能为例

“简单工厂”:

运算类 Operation

public class Operation {private double numberA = 0;private double numberB = 0;public double getResult() {double result = 0;return result;}public double getNumberA() {return this.numberA;}public void setNumberA(double numberA) {this.numberA = numberA;}public double getNumberB() {return numberB;}public void setNumberB(double numberB) {this.numberB = numberB;}}

加法类 OperationAdd

public class OperationAdd extends Operation {@Overridepublic double getResult() {double result;result = getNumberA() + getNumberB();return result;}
}

减法类 OperationSub

public class OperationSub extends Operation {@Overridepublic double getResult() {double result;result = getNumberA() - getNumberB();return result;}
}

 

乘法类  OperationMul

public class OperationMul extends Operation {@Overridepublic double getResult() {double result;result = getNumberA() * getNumberB();return result;}
}

除法类  OperationDiv

public class OperationDiv extends Operation {@Overridepublic double getResult() {double result;if (getNumberB() == 0) {System.out.println("除数不能为0");return 0;}result = getNumberA() / getNumberB();return result;}
}

简单工厂类 OperationFactory

public class OperationFactory {public static Operation createOperate(String operate) {Operation oper = null;switch (operate) {case "+":oper = new OperationAdd();break;case "-":oper = new OperationSub();break;case "*":oper = new OperationMul();break;case "/":oper = new OperationDiv();break;}return oper;}
}

main 方法

public static void main(String[] args) {Operation oper;oper = OperationFactory.createOperate("+");oper.setNumberA(1);oper.setNumberB(2);double result = oper.getResult();System.out.println(result);}

在这段代码中,可以看出,实现加法功能,加法工厂(高层)需要调用加法实现(低层),在main方法中,通过传入“+”,在工厂中生成实现类。此时如果增加“求平方”的功能。添加子类的同时,需要修改OperationFactory类。上层依赖下层实现。

依赖倒置:

使用依赖倒置原则,试着解决下这个问题。以工厂方法模式为例:

在“简单工厂”的基础上,加上抽象工厂。

抽象接口:IFactory

public interface IFactory {Operation createOperation();
}

加法工厂类:AddFactory(实现抽象接口)

public class AddFactory implements IFactory{@Overridepublic Operation createOperation() {return new OperationAdd();}
}

减法工厂类: SubFactory(实现抽象接口)

public class SubFactory implements IFactory {@Overridepublic Operation createOperation() {return new OperationSub();}
}

乘法工厂类:OperationMul(实现抽象接口)

public class MulFactory implements IFactory {@Overridepublic Operation createOperation() {return new OperationMul();}
}

除法工厂类:DivFactory(实现抽象接口)

public class DivFactory implements IFactory{@Overridepublic Operation createOperation() {return new OperationDiv();}
}

main 方法:

public static void main(String[] args) {IFactory factory = new AddFactory();Operation oper = factory.createOperation();oper.setNumberA(1);oper.setNumberB(2);double result = oper.getResult();System.out.println(result);
}

加入工厂方法模式,最直观的感受是:代码多了。

从main方法可以看出,工厂(高层)不直接调用具体的子类(低层),而是工厂和子类都依赖抽象接口,工厂只需要调用抽象接口,将具体实现延迟到了子类。此时如果增加“求平方”的功能,只需要新增实现类,实现抽象接口IFactory即可。实现了依赖倒置。

四、对比

1、工厂方法中,父类依赖抽象不依赖具体,那在哪里决定生成哪个子类?

换句话说:IFactory factory = new AddFactory();

main方法中的这段代码,应该写在哪里?

答案是,这段代码,可以任何形式由调用者传入,可以写在具体调用者的事件下,也可以写在配置文件中。调用者只需“告诉”程序要实现什么功能,具体交给子类实现。

2、两种方式都能实现功能,使用依赖倒置的好处是什么?

1)高层和低层都依赖抽象,低层修改不影响高层,实现解耦合,增加了低层的可扩展性;

2)高层仅需考虑调用哪个接口,无需关注具体实现,由低层实现,低层功能内聚;

 

五、在spring中

       IFactory factory = new AddFactory();

       其实,这段代码,spring帮我们实现了。spring的IOC容器就是工厂,生成各种功能工厂,高层根据功能选择生成哪个工厂。低层是实现类bean,可通过配置,注解等方式,注入到工厂中。高层通过反射从spring工厂中获取bean;bean依赖spring容器,注入到容器中,交给容器管理。spring IOC容器,将调用和实现解耦,使高层和低层都面向了spring IOC容器。

【设计模式】依赖倒置原则与工厂方法模式与spring

相关文章

  1. C#调用Delphi的dll之详解-完整版_附有可下载Demo

    注:本文源代码点此下载 c#调用delphi接口方法,有两种解决办法: 一、将delphi程序编译成一个com组件,然后在c#里引用com组件。 二、非托管调用dephi的dll文件。 这里我们主要讲解一下第二种方法,讲第二种方法之前首先讲解下dllimport。 dllimport是system.runtim…...

    2023/3/28 17:09:32
  2. Sqoop -error- ERROR tool.ImportTool: Import failed: java.io.IOException: No columns t generate for C

    利用sqoop从mysql导入hive报错如下: 21/05/17 21:54:07 ERROR tool.ImportTool: Import failed: java.io.IOException: No columns t generate for ClassWriter at org.apache.sqoop.orm.ClassWriter.generate(ClassWriter.java:1677) at org.apach…...

    2023/3/28 17:09:32
  3. Delphi之OOP面向对向模型------『Delphi园地』

    注:本文源代码点此下载 delphi对于面向对象编程的支持丰富而且强大。除了传统的类和对象,delphi还提供了接口,异常处理,多线程编程等特性。这一章节深入讲解了delphi的对象模型。读者应当对标准的pascal比较熟悉,并且对有关面向对象编程的基本法则有一定了解。 (本…...

    2023/3/28 17:09:31
  4. 解决Nginx启动报nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

    执行命令 openresty -p /opt/app/collect-app/ 启动openresty 出现以下错误: 错误原因:出现这种情况一般是80端口被占用了 解决办法: 法一: sudo fuser -k 80/tcp -- 执行此命令,将进程杀死后,启动ngin…...

    2023/3/28 17:09:31
  5. 解决fuser命令不存在-fuser:command not found

    解决办法:使用yum源安装即可 yum install -y psmisc 再次执行 fuser -k 80/tcp 就OK了...

    2023/3/28 17:09:30
  6. 浏览器加载和渲染html的顺序

    注:本文源代码点此下载 前阵子,在组内给大家做了一次关于“浏览器加载和渲染html的顺序”的分享,这里再总结一下吧。 1.浏览器加载和渲染html的顺序 1、ie下载的顺序是从上到下,渲染的顺序也是从上到下,下载和渲染是同时进行的。 2、在渲染到页面的某一部分时,其…...

    2023/3/28 17:09:30
  7. Hive -- 时间戳转日期需要/1000的解释

    hive中的时间戳转日期的函数为: from_unixtime(BIGINT unixtime,STRING format) 首先这里我要说一下,这里的unixtime的输入单位十秒,也就是十位的BIGINT。 但是呢,在我们实际中用的时间戳一般都是十三位的时间戳,精确…...

    2023/3/28 17:09:29
  8. Delphi研究之驱动开发篇(四)

    注:本文源代码点此下载 通过对前面几篇教程的学习,相信大家已经掌握了一些用delphi开发windows驱动程序的基础知识,从现在开始我们来了解一些必要的底层技术,首先我们要了解的就是内存管理方面的知识。 内存管理器给用户进程提供了大量的api。这些api可以分为三类:…...

    2023/3/28 17:09:29
  9. Hive -- 常用的hive查询函数

    1、get_json_object()函数 get_json_object(STRING json_string, STRING path) 说明:如果其中一个字段数据为json格式的字符串,但实际上的需求是获取json格式字符串中的一个属性的值,那么,就需要用到此函数了。 { "targe…...

    2023/3/28 17:09:28
  10. AJAX请求类

    注:本文源代码点此下载 ajax请求类 作者:hotheart 时间: 2006-08-28 文档类型:原创 来自:蓝色理想 在给blog加上无刷新搜索和即时验证检测后,又看了下代码,感觉太过麻烦,就把xmlhttprequest请求封装到一个类里面,用起来方便多了,不用记那么多代码,什么创建xmlhttp…...

    2023/3/28 17:09:27
  11. flume采集出现com.alibaba.fastjson.JSONException: syntax error, pos 1, line 1, column 2��-�

    采集后数据后,投递到hdfs上时出现以下错误: 2021-05-26 11:44:44,103 (pool-5-thread-1) [ERROR - org.apache.flume.source.SpoolDirectory Source$S…...

    2023/3/28 17:09:27
  12. 从HTML1到HTML5,HTML发展历史介绍【转载】

    注:本文源代码点此下载 html 是 web 同一语言,这些容纳在尖括号里得大略标签,构成了如今得 web。1991 年,tim berners-lee 编写了一份叫做 “html 标签”得文档,内里包括了大约20个用来标记网页得 html 标签。他直接借用 sgml 得标记款式,也便是其后我们看到得 html…...

    2023/3/28 17:09:26
  13. 创建redis集群报错:/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require‘: cannot load suc

    执行创建集群命令: redis-trib create --replicas 0 192.168.1.101:7003 192.168.1.101:7001 192.168.1.101:7002后会出现报错如下: /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in require: cannot load such file -- redis (LoadErro…...

    2023/3/28 17:09:26
  14. 总结22 -- Linux /usr/bin与/usr/local/bin的区别

    说明:最近突然迷惑了/usr/bin与/usr/local/bin存放的不同,故查阅了资料稍微总结了下 区别: /usr/bin下面的都是系统预装的可执行程序,会随着系统升级而改变。/usr/local/bin目录是给用户放置自己的可执行程序的地方,推…...

    2023/3/28 17:09:25
  15. java和python常用方法对比

    注:本文源代码点此下载 java和python常用方法对比 用惯了python,用java写代码感觉有些煎熬的感觉,似乎比python要罗嗦很多。主要还是因为java属于强类型的语言,它的动态性不如python。但其实基本的东西都差不多。 所以想把python和java常用的一些方法罗列一下,同时…...

    2023/3/28 17:09:25
  16. redis--redis常用指令、命令行操作、jedis客户端连接两种方式、redis基本数据类型、redis持久化方式、redis伪分布式集群搭建

    目录 一、redis客户端的常用指令 二、命令行操作 三、redis客户端API操作 1、添加依赖 2、单机连接 3、连接池连接 四、redis数据类型 1、五种数据类型 2、其他操作 五、持久化操作 1、RDB方式 2、AOF方式 六、redis集群搭建 redis伪分布式集群搭建 一、redis客户端的常用…...

    2023/3/28 17:09:24
  17. ajax loading 总结

    注:本文源代码点此下载 1. 使用timer multiview, 先显示view1, 待timer中的执行完成之后,再显示view2即可. view1即loading提示内容,view2为真正要显示的内容. 可以针对整个页面使用.如果view2中的内容显示失败,则显示view3(错误提示), 通过模拟btn_click,这样在p…...

    2023/3/28 17:09:24
  18. 写在Delphi 2010发布之际

    注:本文源代码点此下载 2009.8.25 delphi 2010发布了,从官方的资料看,增加(强)了许多新的特性,比如unicode,匿名方法、泛型支持、反射、多线程debug等,datasnap也有 了很大的改变:可以脱离对com的依赖,通过json传递数据,支持http/https/tcpip等协议,支持轻量级callb…...

    2023/3/28 17:09:22
  19. 【大数据开发】Java基础-总结22- java执行static代码块、构造块与构造方法的顺序

    1、总结如下: 1、Java中静态变量只能在类主体中定义,不能在方法中定义。 2、静态变量属于类所有而不属于方法。 3、静态块:用static申明,JVM加载类时执行,仅执行一次。 4、构造块:类中直接用{ }定义&#x…...

    2023/3/28 17:09:22
  20. 总结1 -- scala中的isInstanceOf和asInstanceOf区别

    区别: 1、若是想判断对象是否属于某个给定的类 -- 使用isInstanceOf方法 2、若是想进行类似于java中的强制转换 ,那么就是用asInstanceOf方法,用asInstanceOf方法将引用转换为子类的引用。 进一步说明: obj.isInstanceOf[T]就如…...

    2023/3/28 17:09:20
  21. java transient 简介

    注:本文源代码点此下载 我们都知道一个对象只要实现了serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了serilizable接口,这个的所有属性和方法都会自动序列化。 然而在实际…...

    2023/3/28 17:09:20
  22. 总结23 -- linux上时间同步服务器的搭建

    一、检查ntp是否安装 1、查看是否安装ntp 命令如下:rpm –qa | grep ntp 若只有ntpdate而未见ntp,则需删除原有ntpdate。比如: ntpdate-4.2.6p5-22.el7_0.x86_64python-ntplib-0.3.2-1.el7.noarch 2、删除已安装的ntp 命令如下:…...

    2023/3/28 17:09:19
  23. HTML语言参考(1)

    注:本文源代码点此下载 html语言参考(1) 1. html 标 签 这 些 标 签 用 于 建 立 具 有 文 本、 标 题 和 列 表 的 html 页 面。 1.1 注 释 〈! --...-- 〉生 成 注 释 1.2 结 构 标 签 〈 html 〉 ... 〈 /html 〉 括 住 整 个 html 文 档。 可 以 包 含:〈…...

    2023/3/28 17:09:19
  24. Asp.net ajax、Anthem.net、Ajax pro三大ajax框架那一种使用比较方便?易于配置?

    注:本文源代码点此下载 asp.net ajax、anthem.net、ajax pro三大ajax框架那一种使用比较方便?易于配置? 2009-08-11 10:01 by 汉卿, 114 visits, 收藏, 编辑 asp.net ajax为asp.net 3.5的默认支持的ajax框架,在功能上、开发工具支持上、文档的完备性方面来…...

    2023/3/28 17:09:18
  25. Scala -scala基础- 编码规范、变量和常量定义与区别、类型层级关系

    目录 scala基础 1、编码规范 1.1、文件名和编码 1.2、代码书写规范 2、scala变量和常量的定义 2.1、val和var 2.2、val和var的区别 2.3、可变与不可变的理解 2.4、延迟加载 3、类级层级关系 scala基础 1、编码规范 1.1、文件名和编码 # 源文件名必须和它包含的顶层类名保持…...

    2023/3/28 17:09:17
  26. 让您的Ajax应用加载数据时界面友好

    注:本文源代码点此下载 让您的ajax应用加载数据时界面友好 让您的ajax应用加载数据时界面友好 ajax火啊,火到了居然loading icons都有很多人专门提供的地步。下面是我同事给我介绍的一些提供ajax activity indicators的网站,共享给大家,以便让我们的ajax应用具有更…...

    2023/3/28 17:09:17
  27. 【大数据开发】Java基础-总结23-java中的static变量、static方法、static执行顺序总结

    说明:最近想到了static代码块、普通代码块与构造函数的执行顺序,故经过试验了一下,写了一下总结,以防自己再次遗忘;另外,也顺便查阅资料,总结了下日常对static方法、static变量的说明。 1、stat…...

    2023/3/28 17:09:16
  28. JAVA 处理时间 - java.sql.Date、java.util.Date与数据库中的Date字段的转换方法

    注:本文源代码点此下载 1、如何将java.util.date转化为java.sql.date? 转化: java.sql.date sd; java.util.date ud; //initialize the ud such as ud new java.util.date(); sd new java.sql.date(ud.gettime()); 2、如果要插入到数据库并且相应的字段为d…...

    2023/3/28 17:09:16
  29. Scala -scala进阶- 高阶函数的初次体验

    目录 高阶函数 1、高阶函数的定义 2、常见的高阶函数 3、常见高阶函数的代码示例 3.1、filter函数 3.2、foreach函数 3.3、map函数 3.4 reduce函数 3.5 flatMap函数 3.6 flatten 函数 高阶函数 1、高阶函数的定义 定义:如果一个函数的传入参数为函数或者返…...

    2023/3/28 17:09:15
  30. Javascript学习笔记12——Ajax入门

    注:本文源代码点此下载 刷新评论列表刷新页面返回页首 发表评论 昵称: [登录] [注册] 主页: 邮箱:(仅博主可见) 验证码:看不清。 换一个 评论内容: 记住我的昵称和主页 --> 登录注册 [使用ctrlenter键快速提交评论] 0 1650229 hjltxm9ccy0…...

    2023/3/28 17:09:14

最新文章

  1. 使用 Flash Builder 的 Apple iOS 开发过程

    使用 Flash Builder 的 Apple iOS 开发过程 iOS 开发和部署过程概述 构建、调试或部署 iOS 应用程序前的准备工作 在测试、调试或安装 iOS 应用程序时选择的文件 将应用程序部署到 Apple App Store 时选择的文件 在使用 Flash Builder 开发 iOS 应用程序之前,必须…...

    2023/3/16 19:40:03
  2. exchange日常管理之九:升级SP1后的灾难恢复

    将exchange 2007升级到了exchange 2010,但是没有打最新的SP1补丁和累积更新,没想到这补丁一打就出问题了,汗了一把啊。 升级过程摘要 1、在前端服务器和后端服务器上安装microsoft office filter pack 2.0 2、停掉后端的beremote备份进程 3…...

    2023/3/16 17:29:51
  3. iOS开发 - js oc相互调用

    2019独角兽企业重金招聘Python工程师标准>>> 首先导入 JavaScriptCore.framework 框架 #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> #import <JavaScriptCore/JavaScriptCore.h>protocol ServerJSProtocol <JSExport>// 微…...

    2023/3/16 6:11:48
  4. git学习之创建版本库

    创建版本库 什么是版本库呢&#xff1f;版本库又名仓库&#xff0c;英文名repository&#xff0c;你可以简单理解成一个目录&#xff0c;这个目录里面的所有文件都可以被Git管理起来&#xff0c;每个文件的修改、删除&#xff0c;Git都能跟踪&#xff0c;以便任何时刻都可以追踪…...

    2023/3/16 5:38:29
  5. List集合中的数据按照某一个属性进行分组

    有的时候&#xff0c;我们需要在java中对集合中的数据进行分组运算。例如&#xff1a;Bill对象有money(float)和type(String)属性&#xff0c;现有个集合List<Bill>&#xff0c;需要按照Bill的type属性进行分组&#xff0c;计算money的总和。有以下两种思路&#xff1a; …...

    2023/3/18 2:30:34
  6. 游戏编程性能优化--------------------------------------------------------------------------------------...

    游戏编程性能优化------------------------------------------------------------------------------------------- 1.全局变量名尽量用缩写&#xff0c;尽可能短&#xff0c;可以减小程序最终生所的体积 2.for循环在较大的循环空间&#xff0c;写成几个循环&#xff0c;以利用…...

    2023/3/16 12:35:44
  7. 2017年软件工程作业-“Hello World!”团队互评beta版本

    A.欢迎来怼——博客园安卓APP&#xff08;测评人&#xff1a;刘淑霞&#xff09; 博客地址&#xff1a;http://www.cnblogs.com/liusx0303/p/7905928.html B.Thunder——爱阅app&#xff08;测评人&#xff1a;方铭&#xff09; 博客地址&#xff1a;http://www.cnblogs.com/…...

    2023/3/16 12:07:11
  8. ibatis 批量插入逻辑

    为什么80%的码农都做不了架构师&#xff1f;>>> ibatis oracle 批量插入配置 <!--批量新增--><insert id"CreateLawStatisticsClassifyBatch" parameterClass"ArrayList">insert into T_LAW_STATISTICS_CLASSIFY(ID,TEMPLATE,ALIA…...

    2023/3/16 5:39:32
  9. secureCRT免密码登陆Linux

    转自&#xff1a;http://blog.csdn.net/wangquannetwork/article/details/46062675 1.实现原理&#xff1a; 通过CRT生成的密钥对&#xff0c;把公钥上传到Linux服务器指定用户下的.ssh目录中&#xff0c;在客户端上只需输入秘钥的密码即可登陆&#xff0c;而且验证一次以后可以…...

    2023/3/16 11:10:31
  10. PP代码生成器(二) 解决方案, 生成任务, 辅助设计面板

    我们接着上一篇博客继续讨论如何使用PP生成代码. 首先, 我们介绍两个概念”解决方案”和 “生成任务”. 解决方案: 解决方案是一系列生成任务的集合. 它包含若干个生成任务.生成任务: 每个任务会关联一个freemarker模板, 最终会使用这个模板来生成一个结果文件解决方案和任务的…...

    2023/3/16 10:41:54
  11. 函数的运用二(一个一个字读,便于学会机率)

    看完前篇的函数运用是不是不在疑惑&#xff0c;那么下面就来点复杂一点的&#xff0c;也不难的。 如下图所示&#xff1a;读绿色和黄色注释。 是不是能写出来了&#xff0c;调用函数的方式&#xff0c;都是一样的。跟上面前篇的调用几乎一样的&#xff0c;不同就是函数名不同而…...

    2023/3/24 2:33:26
  12. 困扰你的Git操作?

    前端学习笔记篇之git那些事 Git是一款免费、开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。学习前端&#xff0c;离不开Git的使用&#xff0c;面试时也是一个常考的话题&#xff0c;在日常开发中&#xff0c;也困扰我们许久&#xff0c;下面就让…...

    2023/3/24 2:33:28
  13. ArrayList和LinkedList的区别

    2019独角兽企业重金招聘Python工程师标准>>> ArrayList和Vector使用了数组的实现&#xff0c;可以认为ArrayList或者Vector封装了对内部数组的操作&#xff0c;比如向数组中添加&#xff0c;删除&#xff0c;插入新的元素或者数据的扩展和重定向。 LinkedList使用了…...

    2023/3/16 17:29:27
  14. Winform开发框架之客户关系管理系统(CRM)的开发总结系列2-基于框架的开发过程...

    在上篇随笔《Winform开发框架之客户关系管理系统(CRM)的开发总结系列1-界面功能展示》中介绍了我的整个CRM系统的概貌&#xff0c;本篇继续本系列的文章&#xff0c;介绍如何基于我的《winform开发框架》的基础上进行CRM系统模块的开发工作&#xff0c;希望对大家在系统模块开发…...

    2023/3/16 5:37:14
  15. shell 日期加减运算

    比如今日是2012-04-22$ date -d "1 day" %Y-%m-%d2012-04-23$ date -d "-1 day" %Y-%m-%d2012-04-21$ date -d "2012-04-10 -1 day " %Y-%m-%d2012-04-09$ date -d "2012-04-10 1 day " %Y-%m-%d2012-04-11$ date -d "-1 week &q…...

    2023/3/15 19:12:30
  16. PHP 字符串替换 substr_replace 与 str_replace 函数

    PHP 字符串替换 用于从字符串中替换指定字符串。 相关函数如下&#xff1a; substr_replace()&#xff1a;把字符串的一部分替换为另一个字符串 str_replace()&#xff1a;使用一个字符串替换字符串中的另一些字符substr_replace() substr_replace() 函数用于把字符串的一部分替…...

    2023/3/16 12:34:47
  17. Android开发者指南(12) —— Android Supported Media Formats

    本文档描述了Android平台支持的媒体播放解码器、网络协议。 作为一名应用软件开发者&#xff0c;你可以自由使用平台上的媒体解码器&#xff0c;这些编解码可以是平台提供&#xff0c;或者是特定设备支持。然而&#xff0c;最好习惯于使用媒体编码配置信息使得应用软件代码编写…...

    2023/3/16 12:06:17
  18. Quartz.NET

    概述 Quartz.NET是一个开源的作业调度框架&#xff0c;非常适合在平时的工作中&#xff0c;定时轮询数据库同步&#xff0c;定时邮件通知&#xff0c;定时处理数据等。 Quartz.NET允许开发人员根据时间间隔&#xff08;或天&#xff09;来调度作业。它实现了作业和触发器的多对…...

    2023/3/16 11:38:32
  19. java算法-递归算法

    2019独角兽企业重金招聘Python工程师标准>>> 不废话直接上代码 public class maxtest {public static void main(String[] args) {//###################阶乘递归算法start###################//System.out.println(f(5));//###################阶乘递归算法start##…...

    2023/3/16 11:09:32
  20. Lifecycle-library-stable

    Google 最近发布了稳定Lifecyclelibrary。笔者认为&#xff1a;如果你正在使用alpha或者beta版本&#xff0c;以下内容可能对你有用。 Deprecated LifecycleActivity 在stable version 1.0.0 之前&#xff0c;LifeCycle Library 并没有实现 LifecycleOwner这个接口&#xff0c;…...

    2023/3/16 10:41:08
  21. 数据结构——哈希表

    前言 使用哈希表可以进行非常快速的查找操作。但是&#xff0c;哈希表究竟是什么玩意儿&#xff1f;很多人避而不谈&#xff0c;虽然知道经常用到&#xff0c;很多语言的内置数据结构像python中的字典&#xff0c;java中的HashMap&#xff0c;都是基于哈希表实现。但哈希表究竟…...

    2023/3/16 10:14:40
  22. Bootstrap~Panel和Table

    在我们对一个页面进行设计时&#xff0c;分块是必须的&#xff0c;没有一个网站是一栏而下的&#xff0c;除非你是在看小说&#xff0c;否则你的页面设计一定是分块的&#xff0c;即它由于多个panel组件&#xff0c;在bootstrap里叫到栅格系统&#xff0c;而在每行每列进行宏观…...

    2023/3/16 6:40:03
  23. pyspider操作千万级库,pyspider在对接量级较大库的策略

    pyspider操作千万级库&#xff0c;pyspider在对接量级较大库的策略 如果是需要pyspider正常的流程去执行&#xff0c;那必然是会在on_strat()时任务执行超时&#xff0c;可能只读取出几万条或十几万条数据就会被破终止&#xff0c;然后执行index_page()&#xff0c;由于这个超时…...

    2023/3/16 6:09:47
  24. Js+MVC~公用API的设计,返回jsonp后使ajax的error属性生效!

    相关知识说明 项目用公用的&#xff21;&#xff30;&#xff29;事实上就是其它子项目&#xff0c;包括非子项目需要从这个项目中得到一个公用的信息&#xff0c;这种产生信息的接口我们称为公用的&#xff21;&#xff30;&#xff29;(application program interface)&#…...

    2023/3/16 8:48:42
  25. 【CentOS 7笔记51】,screen虚拟终端#171207

    2019独角兽企业重金招聘Python工程师标准>>> hellopasswd screen工具 为了不让一个任务意外终端nohup command &screen是一个虚拟终端yum install -y screenscreen直接回车就进入了虚拟终端ctral a组合键再按d退出虚拟终端&#xff0c;但不是结束screen -ls查看…...

    2023/3/16 0:46:40
  26. 行内元素和块级元素(转)

    行内元素和块级元素 2013-01-05 11:40 by greenal, 88623 阅读, 3 评论, 收藏, 编辑 1 块级元素&#xff1a;div , p , form, ul, li , ol, dl, form, address, fieldset, hr, menu, table行内元素&#xff1a;span, strong, em, br, img , input, label…...

    2023/3/16 12:33:43
  27. 微信JSApi支付~坑和如何填坑

    微信一直用着不爽&#xff0c;这几天研究它的jsapi支付&#xff0c;即在微信内打开H5页面&#xff0c;完成支付的过程&#xff0c;在这个过程中&#xff0c;你将会遇到各种各样的问题&#xff0c;而大叔将把这些问题的解决方法写一下&#xff0c;希望可以给你带来帮助&#xff…...

    2023/3/16 12:05:20
  28. 阿里云ECS服务器Linux环境下配置php运行环境

    阿里云ECS服务器Linux环境安装配置PHP的运行环境&#xff0c;不同于window操作系统下配置&#xff0c;因为是linux操作系统主要是在命令窗体里输入命令来操作&#xff0c;对于初次接触过linux系统的可能会有点怕怕的&#xff0c;下不去手。。。。。。 需要安装的软件有Apacheph…...

    2023/3/16 0:45:51
  29. vim文本编辑器和yum的搭建

    rpm -ivh 软件名-版本信息-.rpm &#xff08;安装软件&#xff09; rpm -q 软件名 (查看软件是否安装) rpm -e 软件名 &#xff08;卸载转件&#xff09; 因为rpm有依赖关系而yum刚好解决此问题 使用vim创建/修改文本文件 vim文本编辑器 命…...

    2023/3/16 13:02:32
  30. sql developer 连接oracle错误一例(ORA-12505)

    Oracle安装于VM中用sql developer连接oracle报ORA-12505再三检查lsnrctl status&#xff0c;不得正常后来再发现是oracle instance没有启动。转载于:https://blog.51cto.com/9882derek/2049088...

    2023/3/16 13:02:32