(十七)责任链模式

责任链模式的目的是通过给予多个对象处理请求的机会,已解除请求发送者与接受者之间的耦合关系。面对对象的开发力求对象之前保持松散耦合,确保对象各自的责任最小化。这种设计能够使得系统更加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设计模式作业-责任链模式

    Java设计模式作业-责任链模式:Web过滤器 文章目录 前言 一.类图 二.代码及测试结果 1.Trouble类 2.Support类 3.CharSupport类 4.TypeTransformS ...

  2. Java设计模式系列--责任链模式(应用)

    原文网址:Java设计模式系列--责任链模式(应用)_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Java设计模式中的责任链模式的一些使用场景. 责任链模式的好处 符合单一职责原则 每个功能 ...

  3. JAVA设计模式之责任链模式(职责链模式)

    转自JAVA设计模式之责任链模式(职责链模式)​​​​​​​ 责任链/职责链(Chain of Responsibility)模式的定义 为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理 ...

  4. Java设计模式之责任链模式(简单易懂)

    前言: 责任链模式(Chain of Responsibility): 使多个对象都有机会处理同一请求,从而避免请求的发送者和接受者之间的耦合关系,每个对象都是一个处理节点,将这些对象连成一条链,并沿 ...

  5. Java设计模式之行为型:命令模式

    前言: 在开发中,我们可能需要向某些对象发送一些请求,但我们不知道请求的具体接收者是谁,也不知道被请求的操作是哪个,只知道在系统运行中指定具体的请求接收者即可,打个比方,电视遥控器,我们只需知道按哪个 ...

  6. 轻松学习Java设计模式之责任链模式

    我们的态度是:每天进步一点点,理想终会被实现. 前言 设计模式,可能很多人都是看到代码知道怎么回事,但是离开代码再让其说出来,估计就有点含糊其词了,包括我自己在内.Android中其实用到的设计模式也 ...

  7. Java设计模式之责任链模式(二)

    所有设计模式传送门 本文将一起介绍学习下设计模式之责任链模式.责任链模式是指使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有 ...

  8. 折腾Java设计模式之责任链模式

    责任链模式 顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计 ...

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

    责任链模式在设计模式里边属于比较难的设计模式,主要用于对一个对象进行一系列的操作,每个操作相互独立.这一系列的操作组成了一个操作链,每个操作都有其具体的职责,即是一个责任链. UML图如下 先用一个简 ...

  10. Java 设计模式之责任链模式实现的三种方式

    点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 The worst way to miss someone is to be ...

最新文章

  1. Linux系统资源管理 之 硬件信息
  2. sqlserver中,如果正确得到中文的长度
  3. 零基础学python这本书怎么样-看了这本基础教程的书籍你还担心你的python学不好吗?...
  4. Java连接数据库(4)
  5. airpods_如何通过AirPods与其他人共享音乐
  6. MIT正式发布编程语言Julia 1.0:Python、R、C++三合一
  7. 子列表只是原列表的一个视图
  8. 实验三 类的继承和多态性
  9. php将文件转换为utf-8,PHP-将邮件正文转换为UTF-8
  10. 我的github教程
  11. 【js 分页】js 分页 方法一 【实用】
  12. 怎么白嫖一部好手机?我来告诉你
  13. 采集宝贝提示“属性值最大长度为42个字符(21个汉字)”怎么解决?
  14. el-input 输入框的正则
  15. hive中时间类date函数
  16. docker配置代理pull报错:proxyconnect tcp: tls: first record does not look like a TLS handshake
  17. 漫话:如何给女朋友解释什么是语法糖?
  18. 利用python爬取英雄联盟官网英雄皮肤
  19. jieba中文分词组件
  20. 大学——留德的路01

热门文章

  1. 【windows】下Anaconda详细安装过程
  2. mysql binlog 多少_今天才知道,MySQL 的 binlog 编号可以这么大!
  3. python下载图片到文件夹_python实现解析markdown文档中的图片,并且保存到本地~
  4. k2p一直亮红灯搜不到信号_周迅感情亮红灯?真离了!?亮红灯英文是red light ?red 对了,但不用 light!...
  5. java 取对象的类_Java中通过Class类获取Class对象的方法详解
  6. 使用Keras实现鸢尾花分类
  7. 2022年Java项目课程目录
  8. Spring Boot基础学习笔记05:Spring Boot多环境配置
  9. 安卓案例:基于HttpURLConnection下载文本与图片
  10. SSM框架笔记14:Spring MVC表单验证