atitit.设计模式(1)--—职责链模式(chain of responsibility)最佳实践O7 日期转换

1. 需求:::日期转换 1

2. 能够选择的模式: 表格模式,责任链模式 1

3. 调用代码 2

4. 责任链链的特性: 2

5. 模式结构 4

6. 职责链模式包括例如以下角色:Handler,ConcreteHandler: 详细处理者,HandlerChainUtil ,Client 4

7. 设置哈一个handler,,两个法:排序法,指定法
5

1. 指定法 5

2. 排序法 5

8. 职责链 != 链表 5

9. 职责链的扩展——树状链结构 6

10. 职责链的兜底条款默认的条款: 7

11. 九. 职责链的缺点 7

12. 模式优缺点 7

13. 职责链的适合领域 8

14. 使用中的问题and解决 8

15. 全然的代码 8

16. 參考 11

1. 需求:::日期转换

Str2date  或许是通常格式,,2013-01-11 01:02:03

也或许是us格式 2/13/2013 01:02:03

2. 通常方法的问题,一瓦if else 选择结构..

3. 能够选择的模式: 表格模式,责任链模式

日期转换表驱动改进职责链

表驱动(Table driven),事实上就是指用查表的方式来获取值。

作者:: 老哇的爪子 Attilax 艾龙。  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

4. 调用代码

List li=new ArrayList();

Date d=

(Date) handleChainUtil.handleReq(li, new Handler(

"ConcreteHandler cn prcsr") {

@Override

public Object handleReq(Object arg) throws ParseException   {

return str2date_excpt(source, includeTime);

}

},

new Handler("ConcreteHandler us prcsr") {

@Override

public Object handleReq(Object arg) throws ParseException {

return str2date_excpt(source, includeTime, usFmt);

}

});

Handler bg=(Handler) li.get(0);

System.out.println("---bingo handerl:"+bg.name);

return d;

5. 责任链链的特性:

1. 链是一系列节点的集合。

2. 链的各节点可灵活拆分再重组。

职责链模式:使多个对象都有机会处理请求。从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求。直到有一个对象处理他为止。

职责链是使多个对象都有机会处理请求。从而避免请求的发送者和接受者之间的耦合关系。

将这个对象连成一条链。并沿着这条链传递该请求,直到有一个对象处理他为止。

职责链能够是一条直线、一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求。

  链上的每个对象都是请求处理者,职责链模式能够将请求的处理者组织成一条链。并使请求沿着链传递。由链上的处理者对请求进行对应的处理。

client无须关心请求的处理细节以及请求的传递。仅仅需将请求发送到链上就可以,将请求的发送者和请求的处理者解耦。这就是职责链模式的模式动机。

职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,

而且沿着这条链传递请求,直到有对象处理它为止。

因为英文翻译的不同,职责链模式又称为责任链模式,它是一种对象行为型模式。

在职责链模式里。非常多对象由每个对象对其下家的引用而连接起来形成一条链

6. 模式结构

7. 职责链模式包括例如以下角色:Handler,ConcreteHandler: 详细处理者,HandlerChainUtil ,Client

•Handler: 抽象处理者:定义出一个处理请求的接口。假设须要,接口能够定义出一个方法,以设定和返回对下家的引用。

这个角色通常由一个抽象类或接口实现。

•ConcreteHandler: 详细处理者:详细处理者接到请求后,能够选择将请求处理掉,或者将请求传给下家。

因为详细处理者持有对下家的引用,因此,假设须要。详细处理者能够訪问下家。

•Client: client

HandlerChainUtil :这个十俄的总结...来foreach 每结点..

8. 设置哈一个handler,,两个法:排序法,指定法

1. 指定法

pm.Successor = hr;

hr.Successor = manager;

2. 排序法

List 排序..

9. 职责链 != 链表

让我们来看一下链表的典型特征:

1. 链表是一个链状结构。每一个节点有一个next属性去指向他的下一节点。

2. 链表有一个Header节点,然后用户每次必须通过头节点。然后去遍历寻找每个节点。

职责链,我们能够从头将他拿起,也能够从中间将他拿起:

也就是说我们用户能够去訪问节点中的不论什么一个节点作为開始节点,这就是链表与职责链不同的地方

10. 职责链的扩展——树状链结构

职责链中,我们之前看到的都是一些单链结构,可是事实上在非常多情况下,每个节点都相应着非常多其它的部分。

那么这样。我们的每个节点都能够使用一个List来维护他节点的下一节点,甚至能够用组合模式来分别设计每一节点

11. 职责链的兜底条款默认的条款:

在我们的职责链中,假设不存在这种兜底条款,那么用户假设不从首节点開始訪问。那么就非常可能出现异常的情况。于是我们应该为职责链设置一个默认的条款:

12. 九. 职责链的缺点

让我们继续回到上面的样例,我们发现。事实上当请假时间超过2天的时候。PM和HR事实上没有做不论什么的事情,而仅仅是做了一个传递工作。

而传递工作之后,他们就成了垃圾对象。

也就是说,他们在实际的处理中,并没有发挥不论什么的作用。

那么当这个链结构比較长,比較复杂的话,会产生非常多的内存垃圾对象。

这也就是职责链的最大缺点之所在。

13. 模式优缺点

职责链模式的长处

• 减少耦合度

• 可简化对象的相互连接

• 增强给对象指派职责的灵活性

• 添加新的请求处理类非常方便

职责链模式的缺点

•不能保证请求一定被接收。

•系统性能将受到一定影响。并且在进行代码调试时不太方便;可能会造成循环调用。

14. 职责链的适合领域

假设存在N对N,或者是一般的常规线性关系。那么我们全然能够用表驱动来代替职责链。

驱动

用户不管是从哪一个节点作为他的请求头节点,终于用户都能够得到一个请求的反馈。

职责链并不是是严格的上下级的传递。当中也包含同级的传递,职责链一样能够在同级之间做传递。

•有多个对象能够处理同一个请求。详细哪个对象处理该请求由执行时刻自己主动确定。

•在不明白指定接收者的情况下。向多个对象中的一个提交一个请求。

•可动态指定一组对象处理请求。

15. 使用中的问题and解决

具体handler具体...use list传类k,在add解决

16. 全然的代码

##1

System.out.println(DateUtil.str2dateX("2/13/2013 01:02:03", true));

##2

public static Date str2dateX(final String source, final boolean includeTime) {

Handler bingo_handler =  (Handler) core.new_cglib(Handler.class);

List li=new ArrayList();

Date d=

(Date) handleChainUtil.handleReq(li, new Handler(

"ConcreteHandler cn prcsr") {

@Override

public Object handleReq(Object arg) throws ParseException   {

return str2date_excpt(source, includeTime);

}

},

new Handler("ConcreteHandler us prcsr") {

@Override

public Object handleReq(Object arg) throws ParseException {

return str2date_excpt(source, includeTime, usFmt);

}

});

Handler bg=(Handler) li.get(0);

System.out.println("---bingo handerl:"+bg.name);

return d;

}

##3

public class handleChainUtil {

//todox o7g if trans by arr ,is val trans ,,not ref trans ..

//object ya bsin ,yash val trans..only list ok..

public static Object handleReq(List bingo,Handler... proccsor2) {

//Handler bingo=proccsor2[0];

List li =Arrays.asList(proccsor2);

// List li=li2.subList(1, li2.size());

// li.get(0)

final List li_r=new ArrayList ();

Handler bingoPrcsr=   (Handler) Any.any(li,new Func_4SingleObj(){

@Override

public Object invoke(Object o) {

Handler p=(Handler) o;

try {

Object rst=p.handleReq("");

li_r.add(rst);

return true;

} catch (ParseException e) {

return false;

}

}});

bingo.add(bingoPrcsr);

return li_r.get(0);

}

##--4

public class Any {

/**

* ret a any elmt

* @param arr

* @param function

* @return

*/@SuppressWarnings("all")

public static <atiType, iptType, retType,retTypeFinnaly>  Object  any(

atiType arr, Func_4SingleObj function) {

//retTypeFinnaly ja = new tryX<retTypeFinnaly>() {

//

//@Override

//public retTypeFinnaly item(Object t) throws Exception {

//// attilax 老哇的爪子 下午01:34:58 2014-5-26

//return retTypeFinnalyClass.newInstance();

//}

//}.$();

List ia = (List) arr;

// JSONArray arr1=(JSONArray)arr;

List li = (List) arr;

Iterator<iptType> it = li.iterator();

while (it.hasNext()) {

iptType next = it.next();

Boolean invokeRzt = (Boolean) function.invoke(next);

if(invokeRzt)

return next;

}

return   ia;

}

17. 參考

重温设计模式(三)——职责链模式(chain of responsibility) - 飞林沙 - 博客园.htm

设计模式之三职责链模式 - vito qi - 博客园.htm

版权声明:本文博客原创文章,博客,未经同意,不得转载。

atitit.(设计模式1)--—职责链(chain of responsibility)最佳实践O7 转换日期的更多相关文章

  1. atitit.设计模式(1)--—职责链模式(chain of responsibility)最佳实践O7 日期转换

    atitit.设计模式(1)---职责链模式(chain of responsibility)最佳实践O7 日期转换 1. 需求:::日期转换 1 2. 可以选择的模式: 表格模式,责任链模式 1 3 ...

  2. C++设计模式实现--职责链(Chain of Responsibility)模式

    一. 概述 职责链模式: 使多个对象都有机会处理请求.从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 二. 举个样例 员工要求加薪 ...

  3. 设计模式(十三) 职责链(chain of responsibility)

    软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径.设计模式中运用了面向对象编程语言的重要特性:封装.继承.多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累.最 ...

  4. 设计模式C++描述----05.职责链(Chain of Responsibility)模式

    一. 概述 职责链模式: 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止. 二. 举个例子 员工要求加薪 ...

  5. 职责链(Chain of Responsibility)模式在航空货运中的运用实例

    设计模式这东西,基本上属于“看懂一瞬间,用会好几年”.只有实际开发中,当某一模式很好的满足了业务需求时,才会有真切的感觉.借用一句<闪电侠>中,绿箭侠教导闪电侠的台词:“不是你碰巧遇到了它 ...

  6. 设计模式-利用职责链模式消除if

    本文是对职责链设计模式的应用(变种),所以假设读者已经掌握了职责链设计模式,职责链模式只会应景简介. 本文主要内容: 需求(ShitCode) 职责链模式简介 设计理念 代码演示(消除if) 应用总结 ...

  7. php设计模式之职责链模式

    <?php /** * @desc php设计模式之职责链模式(责任链模式) 定义:顾名思义,责任链模式为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这 ...

  8. 设计模式之职责链模式(JAVA实现)

    学习netty框架时,看到有人说netty用到了设计模式的职责链模式,学习一下职责链模式,主要参考大话设计模式. 主要场景: 小菜想要加薪,向经理提出加薪请求,经理没有权限,经理交由总监处理,总监也没 ...

  9. atitit. 日志系统的原则and设计and最佳实践(1)-----原理理论总结.

    atitit. 日志系统的原则and设计and最佳实践总结. 1. 日志系统是一种不可或缺的单元测试,跟踪调试工具 1 2. 日志系统框架通常应当包括如下基本特性 1 1. 所输出的日志拥有自己的分类 ...

随机推荐

  1. SQLServer 复制中移除和加入公布而不初始化全部项目

    -- 若提前"禁止架构更改".新增的列不会自己主动加入大公布.此时应使用 sp_articlecolumn 加入列 EXEC sp_changepublication @publi ...

  2. 自动更改IP地址反爬虫封锁,支持多线程(转)

    8年多爬虫经验的人告诉你,国内ADSL是王道,多申请些线路,分布在多个不同的电信机房,能跨省跨市更好,我这里写好的断线重拨组件,你可以直接使用. ADSL拨号上网使用动态IP地址,每一次拨号得到的IP ...

  3. Android - 缺少NDT选项和C/C++ Build选项 问题

    缺少NDT选项和C/C++ Build选项 问题 本文地址: http://blog.csdn.net/caroline_wendy 时间: 2014.9.3 使用ADT(Android Develo ...

  4. JS兼容的方式来获取浏览器的宽度

    <script type="text/javascript"> //need to wait until onload so body is available win ...

  5. Java算法分析1—————寻找数组同样元素

    算法的两个评測指标:执行时间和内存消耗 要么用时间换空间,要么用空间换时间 寻找数组同样元素測试一: 0~99共100个元素各不同样,新增加一个0~99的元素不明白位置 从101个元素数组中找出与0~ ...

  6. wscript:329: error: Could not autodetect OpenSSL support. Make sure OpenSSL development packages are

    安装node错: wscript:329: error: Could not autodetect OpenSSL support. Make sure OpenSSL development pac ...

  7. 动态加载资源文件(ResourceDictionary)

    原文:动态加载资源文件(ResourceDictionary) 在xaml中控件通过绑定静态资源StaticResource来获取样式Style有多种方式: 1.在项目的启动文件App中<App ...

  8. hdu1430魔板

    Problem Description 在魔方风靡全球之后不久,Rubik先生发明了它的简化版——魔板.魔板由8个同样大小的方块组成,每个方块颜色均不相同,可用数字1-8分别表示.任一时刻魔板的状态可 ...

  9. 使用NaturalDuration获取音频的时长

    #region customizeTime ) sec = " + mediaElement.Position.Seconds.ToString(); else sec = mediaEle ...

  10. MyBatis+Spring+Spring MVC整合开发

    MyBatis+Spring+Spring MVC整合开发课程观看地址:http://www.xuetuwuyou.com/course/65课程出自学途无忧网:http://www.xuetuwuy ...