- 浏览: 335076 次
最新评论
-
HuangYu_05:
你好,代码麻烦发一份给我,谢谢,1007331304@qq.c ...
Quartz动态控制定时任务的开启与关闭以及动态配置时间规则 -
gcsky5211:
大神发我一份,425563078@qq.com
Quartz动态控制定时任务的开启与关闭以及动态配置时间规则 -
lhfJPX:
兄弟,你好! 能给我发一份吗?274718843@qq.c ...
Quartz动态控制定时任务的开启与关闭以及动态配置时间规则 -
颜若儒:
最后一步图是不是画错了,3应该在前面吧
HashMap在java并发中如何发生死循环 -
Rokey_hansq:
求一份928920125@qq.com
Quartz动态控制定时任务的开启与关闭以及动态配置时间规则
文章列表
策略模式就是定义一组算法,将每个算法都封装起来,并且是他们之间可以互换
通过类图可以知道,策略模式设计到如下三个角色
1.Context封装角色
它也叫上下文角色,其作用就是用来封装高层模块对策略的直接访问,封装可能存在的变化
2.Strategy抽象策略角色
策略的抽象,定义每个算法或策略必须具有的方法和属性
3.ConcreteStrategy 具体策略角色
实现抽象策略中的操作
下面是上述类图的代码实现:
/**
*
* 抽象策略角色
*
*/
public abstract class Strategy {
...
装饰者模式又叫包装模式,定义如下:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰者模式相比生成子类来说更为灵活。
装饰者模式的类图如上:
从图中可以看到装饰着模式涉及到四个角色:
1.抽象构件角色Component
Component可以是一个接口或者抽象类,主要是定义一些规则
2.具体构件角色ConcreteComponent
ConcreteComponent是抽象构件的实现类同时也是被装饰的对象
3.Decorator抽象装饰者角色
一般是一个抽象者对象,同时实现抽象构件角色中定义的功能,并且含有一个私有属性执行抽象构件
4.具体装 ...
责任链模式是一种对象的行为模式。
在责任链模式里,使多个对象都有机会出来请求,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求。
责任链模式的显著优点就是讲请求和处理分开,请求者可以不用知道是谁处理的,处理者可以不用知道请求的全貌,责任链的一个显著缺点就是性能问题,因为每个请求都是从链头遍历的到链尾,特别是在链比较长的时候,性能是一个非常大的问题,还有一个问题就是调试很不方便,由于采用了类似递归的方式,调试的时候逻辑可能会比较复杂。
在命令模式中说了一个自己项目的的查询模块,只是查询的类型不同,有根据订单 ...
命令模式是一个高内聚的模式,其定义如下:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录日志,可以提供命令的撤销和恢复功能。
命令模式的通用类图如下:
命令模式是对命令的封装,命令模式把发出命令的责任和执行命令的责任分开,委派给不同的对象。每一个命令都是这样一个操作:请求一方发出要求执行一个操作,接收的一方收到请求并执行操作,命令模式允许请求方和执行方独立。
命令模式具有下列特点:
1.类见解耦
执行者和接收者之间没有任何依赖关系,调用者实现时只需要调用Command抽象类的execute方法 ...
中介者模式又叫调停模式,定义如下:用一个中介者对象封装一系列的对象的交互,中介者使各个对象不需要显示的相互作用,从而使其耦合松散,而且可以独立的改变他们之间的交互。
通用类图如下:
...
原型模式是一种创建型的模式,原型模式的简单程度仅次于单例模式和迭代器模式,正是由于简单,使用的场景非常多。
通过原型模式的通用类图可以看到,其实原型模式的核心就是一个clone方法,通过该方法实现对象的 ...
为什么叫动态代理呢?动态代理就是实现阶段不用关心代理谁,而是在运行阶段指定代理哪一个对象,相对来说自己写代理类的方式都是静态代理,现在有一个非常流行的框架Spring,当我们面试的时候一般都会问Spring有哪些特征,我们一般会说AOP、IOC,其实这里的AOP即面向横切面变成的实现原理就是动态代理。
接着上次小明找游戏代理说,看看使用动态代理如何实现小明找代练的场景:
与自己写代理类的不同之处是我们并没有写代理类并且多了一个接口InvocationHandler,这个接口的作用就是为我们在运行时产生一个指定的代理对象并且这个接口使用JDK提供的。
代码如下:
...
代理模式是一种使用率非常高的模式,定义如下:为其他对象提供一种代理以控制这个对象的访问。
从通用类图中可以看出代理模式涉及到三个类:
1.Subject抽象主题角色
抽象主题类可以是抽象类也可以是接口,上面的类图使用的抽象类
2.具体主题角色
也可以称为被委托角色,是业务逻辑的具体执行者
3.Proxy代理角色
它负责对真是角色的应用,把所有抽象的主题类定义的方法限制委托给真是的主题角色实现,并且在真是的主题角色处理完毕前后做预处理和善后的工作
代码如下:
/**
* 抽象主题类
*/
public abstract class ...
将一个复杂的对象创建与它的表示分离,是的同样的构建过程可以创建不同的表示。
通用类图如下:
建造模式中主要有如下四个角色:
Prodct产品类:
产品便是建造中的复杂对象
抽象建造者:
给出一个或多个抽象接口,规范产品的组件,有子类实现具体组建方法
具体建造者:
通常是实现了抽象建造者的方法,并且返回一个组建好的对象
Director导演类:
负责安排已有的模块顺序,然后告诉建造者开始建造
/**
*
* 产品类
*
*/
public class Product {
}
/**
* 抽象建造 ...
设计模式之模板方法模式
- 博客分类:
- 设计模式
模板方法模式的定义:定义一个操作中的算法框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
模板方法的通用类图
我们所说的模板方法指的就是抽象类中的templete方法,该方法实现对doSomething方法的调用并且这个方法的具体实现是交由子类实现的。
模板方法的具体应用,比如我们开发的系统需要解析文件并导入数据库,文件类型有txt、csv、xls,我们就可以考虑模板方法模式。
/**
* 文件解析的抽象类
*
*/
public abstract class Ab ...
设计模式之抽象工厂模式
- 博客分类:
- 设计模式
抽象工厂模式是工厂方法模式的升级,在有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方法。
抽象工厂的通用类图
抽象工厂模式使用于多个业务品种或者多个业务类型,即AbstractProduct存在多个实现类,拿生产手机为例。
可以生产诺基亚(由于可以砸核桃所以破产了),苹果、三星、小米、华为、锤子等,类图如下:
将上述的手机类图转化为代码如下:
/**
* 手机的抽象类
*
*
*
*/
public abstract class AbstractMobile {
...
设计模式之工厂方法模式
- 博客分类:
- 设计模式
最近一直在看设计模式相关的书籍,决定正确每天将自己学到的设计模式以及自己的理解写成博客,供大家参考和点评,主要目的还是对自己的学习做一下总结。
最近看到一本设计模式的书籍《设计模式之禅》已经通读一遍,现在是第二遍阅读,感觉作者对设计模式的讲解很通俗易懂,通过对这本书的学习也加深自己对java框架方面的理解,java框架上又很多设计模式,以前上学的时候也学过设计模式,但是当时的理解只是停留在记忆上,并没有真正的用到实践中,通过读这本书之后回看自己开发过的项目,感觉有的地方如果使用一些设计模式的话那么代码的可扩展性会更加灵活。
好了就说道这里,本 ...
什么是单例模式?
单例模式就是一个类只能产生一个实例,如果控制一个类只能产生一个实例呢?
我们在创建对象时一般都是使用new来产生对象即调用类的构造方法,如果将构造方法私有化那么就控制了外部类随意创建对象的能力。
所以单例的实现可以总结为:
1.构造方法私有化
2.类中含有一个本类型的静态的私有化的属性
3.对外提供一个静态的返回本类型的静态方法
单例模式的实现分为懒汉式和饿汉式
饿汉式:
public class Singleton {
// 构造器私有化
private Singleton() {
}
...
给定一组区间,合并所有重叠的间隔。
例如:
[1,3],[2,6],[8,10],[15,18]
返回:
[1,6],[8,10],[15,18]
解决思路:
首先我们需要创建一个区间类,类中属性为start和end并且实现排序,我们队排序后的区间类进行判断
例如区间类为A ,我们需要循环区间类集合,比较两个区间类A1,A2如果A1.start>=A2.end则我们人A1,A2是可以合并的。
public class MergeIntervals implements Comparable<MergeInterv ...
Mybatis批量插入数据到Oracel
- 博客分类:
- java
最近项目中出现了一个功能存在性能问题,经过研究发现主要是出现在数据插入的时候,当时用的单条提交,发现性能极其差,因为项目中用的mybatis,所以考虑用批量提交的方式。
<!-- 批量提交 -->
<insert id="batchInsertWithoutSeq" parameterType="java.util.List">
insert into ACC_AGGENTRY (SEQ, AGGENTRY_SEQ, THIACCOUNTSUM_SEQ,
BUSDATA_FLAG, ENTR ...