(十七)责任链模式

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

    一.创建 1.创建文件 open(path,'w') 2.创建目录 (1)os.mkdir(pt[, mode=0777]) 新建一个目录pt,参数mode表示生成的目录的权限,默认是超级权限,也就是 ...

  2. L#中 int.TryParse 有问题

    今天发现了一个 L# 的异常..因此记录一下 List<string> strList = new List<string>(); ; i<; ++i) { ; j< ...

  3. H5 语义化、基本事件 浅析 (含file对象、drag拖拽等)

    1.语义化标签 帮助搜索引擎,盲人设备等程序,辨识网页内容信息,明确网页区域分布,不体现任何样式,但存在浏览器兼容性问题,如IE8下无<header>标签. ① H5基本语义标签: < ...

  4. POJ1195Mobile phones

    二维树状数组板子题. #include<cstdio> #include<cstring> #include<iostream> #include<cstdl ...

  5. [SaltStack] salt-minion启动流程

    SaltStack源码阅读 前面理了下salt-master的启动流程, 这次来看看salt-minion的启动流程. 启动salt-minion方法: /etc/init.d/salt-minion ...

  6. (一)为什么要学习docker

    一.docker的历史与现状 1.PAAS平台的范围和内容 1.确定产品定位和需求,确定首次迭代的范围. 2.制作界面原型. 以下是 paas 范畴 .技术选型,然后根据技术选型为每个开发者搭建开发环 ...

  7. hdu 4517(递推枚举统计)

    小小明系列故事——游戏的烦恼 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)To ...

  8. AC日记——第K大的数 51nod 1105

    1105 第K大的数 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 数组A和数组B,里面都有n个整数.数组C共有n^2个整数,分别是A[0] * ...

  9. Educational Codeforces Round 35 B. Two Cakes【枚举/给盘子个数,两份蛋糕块数,最少需要在每个盘子放几块蛋糕保证所有蛋糕块都装下】

    B. Two Cakes time limit per test 1 second memory limit per test 256 megabytes input standard input o ...

  10. Product of Array Except Self - LeetCode

    Given an array of n integers where n > 1, nums, return an array output such that output[i] is equ ...