Java设计模式(九)责任链模式 命令模式

(十七)责任链模式

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

public class ChainTest {
	public static void main(String[] args) {
		String pass1="123456";
		String pass2="123456";
		String personId="123456789012345678";
		String email="[email protected]";
		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 "两次密码输入不一致";
		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 "密码长度必须为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 可能多此一举了。但是在每个流程都很复杂的时候可以考虑使用。简化对象链和客户端代码是职责链主要的优点。

(十八)命令模式 command

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

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

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设计模式(九)责任链模式 命令模式

时间: 2024-08-08 18:17:13

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

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

前言 在上一篇中我们学习了结构型模式的享元模式和代理模式.本篇则来学习下行为型模式的两个模式, 责任链模式(Chain of Responsibility Pattern)和命令模式(Command Pattern). 责任链模式 简介 责任链模式顾名思义,就是为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为型模式.在这种模式中,通常每个接收者都包含对另一个接收者的引用.如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接

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

本文继续介绍23种设计模式系列之职责链模式. 什么是链 1.链是一系列节点的集合. 2..链的各节点可灵活拆分再重组. 职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系, 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止. 角色 抽象处理者角色(Handler):定义出一个处理请求的接口.如果需要,接口可以定义 出一个方法以设定和返回对下家的引用.这个角色通常由一个Java抽象类或者Java接口实现. 具体处理者角色(ConcreteHan

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

生产一个产品,需要依次执行多个步骤,才能完成,那么是使用责任链模式则是极好的. 在性能告警模块开发过程中,创建一条告警规则需要执行阈值解析,中间表生成,流任务生成,规则入库,告警事件入库等诸多操作.如果把这些步骤糅合在一个类中,代码可读性及复杂度往往是灾难的,特别对于这么多步骤的事务性操作,更是力不从心.使用责任链模式,上述问题迎刃而解. 以告警规则创建为例子,简化流程如下 阈值解析 ---> 流任务生成 ---> 规则入库 回滚流程如下 1. 阈值解析失败:回滚阈值解析. 2. 流任务生产失

JAVA设计模式之责任链模式

在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任. 从击鼓传花谈起 击鼓传花是一种热闹而又紧张的饮酒游戏.在酒宴上宾客依次坐定位置,由一人击鼓,击鼓

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

责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任. 纯的与不纯的责任链模式 一个纯的责任链模式要求一个具体的处理者对象只能在两个行为中选择一个:一是承担责任,而是把责任推给下家.不允许出现某一个具体处理者对象在承担了一部分责任后又 把责任向下传的情况. 在一个纯的责

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

职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将所有处理对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止. ? 请求传递方向:从低级到高级 ? 重点:如何形成这个责任链 ? 特点:发出处理请求的客户端并不知道是系统当中的哪一个对象最终处理这个请求,这样系统的更改可以在不影响客户端的情况下动态地重新组织和分配责任.1. 派生类中都具备的功能(1) 都要设置后继者(一样)(2) 都能实现自己职责范围

浅谈JAVA设计模式之——责任链模式(COR)

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/45569099 一.概述 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链, 并沿着这条链传递该请求,直到有一个对象处理它为止. 这一模式的想法是,给多个对象处理一个请求的机会,从而解耦发送者和接受者. 二.适用性 1.有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定. 2.你想在不明确指定接收者的情况下,向多个对象中的一

java设计模式之责任链----Filter

filter:过滤; 滤除; 目前java主要的应用就是web项目,所以会面临各种各样的数据访问和请求,所以过滤是必须的就像是人的肺一样,需要将对人体有利的留在体内,不利的排除体外. 马老师的这堂关于javawebfilter的课可以说是很经典,至少在我看来是这样的,循序渐进,很容易让学生明白他的原理. 题外话:java, so beautiful!!! 下面就一些扩展性的方面归纳一下性能:从A-E逐级递增. 前提:过滤的内容msg="***********************";

图解Java设计模式之职责链模式

图解Java设计模式之职责链模式 学校OA系统的采购审批项目 :需求是 传统方案解决OA系统审批,传统的设计方案 职责链模式基本介绍 职责链模式解决OA系统采购审批 职责链模式在SpringMVC框架应用的源码 职责链模式的注意事项和细节 学校OA系统的采购审批项目 :需求是 采购员采购教学器材1)如果金额 小于等于 5000,由教学主任审批 (0<=x<=5000)2)如果金额 小于等于 10000,由院长审批(5000 < x <= 10000)3)如果金额 小于等于 3000