(十七)责任链模式

责任链模式的目的是通过给予多个对象处理请求的机会,已解除请求发送者与接受者之间的耦合关系。面对对象的开发力求对象之前保持松散耦合,确保对象各自的责任最小化。这种设计能够使得系统更加easy改动,同一时候减少产生缺陷的风险。

public class ChainTest {
public static void main(String[] args) {
String pass1="123456";
String pass2="123456";
String personId="123456789012345678";
String email="fanyun7654@163.com";
register(pass1,pass2,personId,email);
}
public static void register(String pass1,String pass2,String personId,String email){
Filter f1 = new PasswordFilter1();
Filter f2 = new PasswordFilter2();
Filter f3 = new PersonIdFilter();
Filter f4 = new EmailFilter();
f1.setNext(f2);
f2.setNext(f3);
f3.setNext(f4);
System.out.println(f1.doFilter(pass1,pass2,personId,email));
}
}
abstract class Filter{
Filter next = null;
public Filter getNext() {
return next;
}
public void setNext(Filter next) {
this.next = next;
}
public String doFilter(String pass1,String pass2,String personId,String email){
if (next == null)
return "成功";
else
return next.doFilter(pass1,pass2,personId,email);
}
}
class PasswordFilter1 extends Filter{
public String doFilter(String pass1,String pass2,String personId,String email){
if (!(pass1.equals(pass2)))
return "两次password输入不一致";
else
return super.doFilter(pass1,pass2,personId,email);
}
}
class PasswordFilter2 extends Filter{
public String doFilter(String pass1,String pass2,String personId,String email){
if (pass1.length()!=6)
return "password长度必须为6";
else
return super.doFilter(pass1,pass2,personId,email);
}
}
class PersonIdFilter extends Filter{
public String doFilter(String pass1,String pass2,String personId,String email){
if (personId.length()!=15 && personId.length()!=18)
return "身份证号码非法";
else
return super.doFilter(pass1,pass2,personId,email);
}
}
class EmailFilter extends Filter{
public String doFilter(String pass1,String pass2,String personId,String email){
int i1=email.indexOf("@");
int i2=email.indexOf(".");
if (i1==-1 || i2==-1 || i2-i1<=1 || i1==0 || i2==email.length()-1)
return "email非法";
else
return super.doFilter(pass1,pass2,personId,email);
}
}

样例可能有点复杂。这是一个树状的样例,当然也能够是环状,环就是用同一个方法循环处理。上面的样例处理登录比起一串if else 可能多此一举了。可是在每一个流程都非常复杂的时候能够考虑使用。简化对象链和client代码是职责链基本的长处。

(十八)命令模式 command

命令模式将请求封装在一个对象中,能够像管理对象一样去管理方法,传递并在合适的时机调用。

命令模式同意在服务运行的上下文使用client代码,所以除了控制方法的运行时间和上下文之外。命令模式还提供了一个钩子机制。同意客户代码作为算法的一部分。

interface Command{
public void exe();
}
class Receiver{
public void action(){
System.out.println("command action");
}
}
class Invoker{
private Command command;
public Invoker(Command command){
this.command = command;
}
public void action(){
command.exe();
}
}
class MyCommand implements Command{
private Receiver rec;
public MyCommand(Receiver r){
this.rec = r;
}
public void exe(){
rec.action();
}
}
public class CommandTest {
public static void main(String[] args){
Receiver r = new Receiver();
Command cmd = new MyCommand(r);
Invoker in = new Invoker(cmd);
in.action();
}
}

命令模式的目的就是达到命令的发出者跟运行者解耦,实现请求和运行分开。

Java设计模式(九)责任链模式 命令模式的更多相关文章

  1. Java设计模式之八 ----- 责任链模式和命令模式

    前言 在上一篇中我们学习了结构型模式的享元模式和代理模式.本篇则来学习下行为型模式的两个模式, 责任链模式(Chain of Responsibility Pattern)和命令模式(Command ...

  2. 详解java设计模式之责任链模式

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt175 从击鼓传花谈起 击鼓传花是一种热闹而又紧张的饮酒游戏.在酒宴上宾客依次 ...

  3. Java设计模式之责任链模式、职责链模式

    本文继续介绍23种设计模式系列之职责链模式.   什么是链 1.链是一系列节点的集合. 2..链的各节点可灵活拆分再重组.   职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间 ...

  4. JAVA设计模式之责任链模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其 ...

  5. Java设计模式应用——责任链模式

    生产一个产品,需要依次执行多个步骤,才能完成,那么是使用责任链模式则是极好的. 在性能告警模块开发过程中,创建一条告警规则需要执行阈值解析,中间表生成,流任务生成,规则入库,告警事件入库等诸多操作.如 ...

  6. java设计模式之责任链模式(Chain of Responsibility)

    转自:http://www.cnblogs.com/java-my-life/archive/2012/05/28/2516865.html 在阎宏博士的<JAVA与模式>一书中开头是这样 ...

  7. java设计模式之责任链模式以及在java中作用

    责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链上的哪一个 ...

  8. 击鼓传花联想到了Java设计模式:责任链模式

    目录 应用场景 简单示例 责任链模式 定义 意图 主要解决问题 何时使用 优缺点 击鼓传花的故事 应用场景 http web请求处理,请求过来后将经过转码.解析.参数封装.鉴权等一系列的处理(责任), ...

  9. Java设计模式之责任链设计模式

    职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将所有处理对象连成一条链,并沿着这条链传递请求,直到有一个对象处理 ...

  10. Java设计模式---ChainOfResponsibility责任链模式

    参考于 : 大话设计模式 马士兵设计模式视频 代码参考于马士兵设计模式视频 写在开头:职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系 图来自大话设计模式,下面我的代 ...

随机推荐

  1. [01] radio ,checkbox 表单文字对齐

    http://www.cnblogs.com/wangsir015/p/5555818.html 这几天在做表单时总会碰到复选框(checkbox)和单选框(radio)与文字不对齐的问题,要不是ch ...

  2. HTML 上标和下标

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. 幸运数字(bzoj 1853)

    Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是“幸运号码”! ...

  4. Java数据结构-------List

    三种List:ArrayList,Vector,LinkedList 类继承关系图 ArrayList和Vector通过数组实现,几乎使用了相同的算法:区别是ArrayList不是线程安全的,Vect ...

  5. [转]从头到尾彻底理解KMP

    https://blog.csdn.net/v_july_v/article/details/7041827

  6. 代码怎样重构<1>

    原文发布时间为:2011-05-24 -- 来源于本人的百度文章 [由搬家工具导入]

  7. bjam.exe 各个参数(转)

    原文转自 http://m.blog.csdn.net/article/details?id=42265605 bjam.exe stage --toolset=msvc-12.0 --without ...

  8. android的布局-----RelativeLayout(相对布局)

    学习导图 注:父容器定位的属性值只能是Boolean ,兄弟组件定位的属性值只能是ID 典型案例(梅花) <?xml version="1.0" encoding=" ...

  9. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---16

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  10. 一张图让你学会Python【转】

    转自:http://blog.csdn.net/qq_30845505/article/details/51588423 有编程基础的人一看就可以了解 Python 的用法了.真正的 30 分钟上手. ...