
正文
java项目责任链代码 java职责链设计模式
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
java 设计模式之责任链模式
; 不知道大家都写过宏没有 就是一个键绑定多个技能 如果排在前面的技能有CD 则跳过此技能 会执行之后的技能 记得曾经玩DK 打怪的时候 就是用一个键 一直按就行java项目责任链代码了 在servlet里的doGet和doPost方法 java项目责任链代码我们一把都把doGet请求发动到doPost里来处理 这也是一种责任链的模式 这里 有个宏 绑定java项目责任链代码了 冰血冷脉和寒冰箭 两个技能 package responsibility;/** * DOC 技能接口 要绑定的技能都要实现这个接口 * */public interface ISkill { public void castSkill() } package responsibility;import java util ArrayList;import java util List;/** * DOC 宏类 用来把多个技能绑在一起 实现一键施放 * */public class Macro { /** * DOC 多个技能绑在一起的集合 */ public ListISkill skills = new ArrayListISkill() /** * * DOC 按照绑定顺序施放技能 */ public void castSkill() { for (int i = ; i skills size() i++) { skills get(i) castSkill() } } /** * DOC 绑定技能 * * @param skill */ public void bindSkill(ISkill skill) { skills add(skill) }} package responsibility;/** * DOC 寒冰箭技能 无冷却时间 * */public class IceArrow implements ISkill { @Override public void castSkill() { System out println( 施放 》寒冰箭 ) }} package responsibility;/** * DOC 冰血冷脉技能 冷却时间 分钟 */public class IceBloodFast implements ISkill { @Override public void castSkill() { // 这里可以用来判断技能是否在冷却当中 这里略去java项目责任链代码了 System out println( 施放 》冰血冷脉 ) }} 测试类 package responsibility;public class Main { public static void main(String[] args) { Macro macro = new Macro() macro bindSkill(new IceBloodFast()) macro bindSkill(new IceArrow()) macro castSkill() }} 测试结果 正在施放 》冰血冷脉 施放 》寒冰箭 lishixinzhi/Article/program/Java/gj/201311/27276
相关问答
Q1: 深入浅出:什么是基于Java的责任链模式
1、责任链模式就是这种“推卸”责任java项目责任链代码的模式java项目责任链代码,java项目责任链代码你的问题在我这里能解决我就解决,不行就把你推给另一个对象。至于到底谁解决java项目责任链代码了这个问题了呢?我管呢!
2、责任链模式由两个角色组成:
1) 抽象处理者角色(Handler):它定义了一个处理请求的接口。当然对于链子的不同实现,也可以在这个角色中实现后继链。
2) 具体处理者角色(Concrete Handler):实现抽象角色中定义的接口,并处理它所负责的请求。如果不能处理则访问它的后继者。
至于类图不放也罢。毕竟就是一个继承或者实现。
3、从名字上大概也能猜出这个模式的大概模样——系统中将会存在多个有类似处理能力的对象。当一个请求触发后,请求将在这些对象组成的链条中传递,直到找到最合适的“责任”对象,并进行处理。
《设计模式》中给它的定义如下:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
从定义上可以看出,责任链模式的提出是为了“解耦”,以应变系统需求的变更和不明确性。
下面是《设计模式》中给出的适用范围:
1) 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。
2) 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。
3) 可处理一个请求的对象集合应被动态指定。
Q2: 责任链模式(Chain of Responsibility)
描述 责任链模式(CoR)建议发出请求的对象与可能处理这个请求的对象集合之间是低耦合的(set of potential request handler objects) 在有不止一个对象可以处理或实现(fulfill)客户请求的时候 责任链模式(CoR)认为顺序地给每一个对象一次处理请求的机会 在这种情况下应用责任链模式(CoR) 把每一个可能处理请求的对象以链表的形式组织起来 在链表中 每一个对象有一个指向下一个对象的指针(Pointer) 在链表中的第一个对象接受请求并且决定是否处理它 或者把它传递给下一个对象 请求一个接一个地遍历(flow through)链表中的所有对象 直到请求被其中的一个对象处理或者因到达链表尾而没有被处理 例如 如果A?〉B?〉C都可以处理请求 按照这个顺序 A处理请求或者在不知B是否可以处理这个请求的情况下递给B 接受到请求的B可以处理这个请求或者传递给C 当C收到请求时 这个请求可以被C处理或者没有经过任何处理而结束 换句话说 提交的处理链表中的请求在到达链表尾前 可以不被任何处理 下面是责任链模式(CoR)一些重要的特征 ( )可能处理请求的对象集合(set of potential request handler objects)以及它们在链表中的顺序是由客户端根据现应用的状态在运行时动态决定的 ( )客户端根据现在的状态 对于不同的请求类型 可以拥有不同的可能处理请求的对象集合(set of potential request handler objects) 一个处理请求的对象也可以根据客户应用的状态和请求类型 把请求传递给不同的处理对象 为了使这些交互简单 所有的可能处理请求的对象应提供一致的接口 在JAVA中 不同处理对象可以实现一个共同的接口或者继承同一个抽象的父类来实现 ( )客户对象初始化请求 或者在不知道这些对象是否能处理这个请求的情况下初始化任何可能处理请求的对象 也就是说 客户对象和在处理链表中的处理对象都不需要知道到底哪个对象去处理这个请求 ( )请求不能保证被处理 也就是 在没有处理的情况下 请求已经到达了处理链表尾 下面的这个情景展示了一个购买请求传递到处理链表中 但是在到达链表尾时 并没有被接受 例子 让我们模拟一个在特定组织里的购买请求(PR)授权过程的应用 通常 在确立订单并发到卖方前 一个购买请求是需要不同的管理代表授权的 我们假定一个组织中在购买请求金额限制上分为四个授权管理层次 如下面的列表 Table : Levels of PR AuthorizationManagement Level Authorization LimitBranch Manager$ Regional Director$ Vice President$ President and COO$ 我们可以定义不同的类 来对应上面列表中的不同管理层次 Listing : Classes Representing Different Management Levelsclass BranchManager {static double LIMIT = ;……}//End of classclass RegionalDirector {static double LIMIT = ;……}//End of classclass VicePresident {static double LIMIT = ;……}//End of classclass PresidentCOO {static double LIMIT = ;……}//End of class让我们定义一个PurchaseRequest类 它代表购买请求 PurchaseRequestID:intdescription:Stringamount:doublegetAmount():double Figure : PurchaseRequest Class RepresentationListing : PurchaseRequest Classclass PurchaseRequest {private int ID;private String description;private double amount;public PurchaseRequest(int id String desc double amt) {ID = id;description = desc;amount = amt;}public double getAmount() {return amount;}public String toString() {return ID + : + description;}}一个给定的购买请求(PR)被上面的管理代表所授权或处理 换句话说 代表不同管理层次的四个类都是处理给定购买请求的可能处理者(授权者) 因此 不建议PurchaseRequest实例榜定到任何的一个授权者 通过使用责任链模式(CoR) 实现了PurchaseRequest对象和可能授权请求的对象集合之间关联的低耦合 利用责任链模式(CoR) 让我们定义一个抽象类PRHandler 它定义这些可能授权购买请求对象的统一接口 Listing : Abstract PRHandler Classpublic abstract class PRHandler {private PRHandler nextHandler;private String handlerName;public PRHandler(String name) {handlerName = name;}public String getName() {return handlerName;}public abstract boolean authorize(PurchaseRequest request);public PRHandler getNextHandler() {return nextHandler;}public void setNextHandler(PRHandler handler) {nextHandler = handler;};} Figure : Purchase Request Approver Hierarchy现在 每一个授权者被重新定义为抽象类PRHandler的子类 每一个授权对象把购买请求的金额和它所在的管理层次所授权的金额进行比较 如果请求的金额小于授权的金额 它就可以授权购买 如果大于 它传递购买请求到链表中的下一个授权者 Listing : PRHandler Concrete Subclassesclass BranchManager extends PRHandler {static double LIMIT = ;public BranchManager(String name) {super(name);}public boolean authorize(PurchaseRequest request) {double amount = request getAmount();if (amount = LIMIT) {System out println( Branch Manager + getName() + has authorized the PR ? + request);return true;} else {//forward the request to the next handlerreturn getNextHandler() authorize(request);}}}//End of classclass RegionalDirector extends PRHandler {static double LIMIT = ;public RegionalDirector(String name) {super(name);}public boolean authorize(PurchaseRequest request) {double amount = request getAmount();if (amount = LIMIT) {System out println( Regional Director + getName() + has authorized the PR ? +request);return true;} else {//forward the request to the next handlerreturn getNextHandler() authorize(request);}}}//End of classclass VicePresident extends PRHandler {static double LIMIT = ;public VicePresident(String name) {super(name);}public boolean authorize(PurchaseRequest request) {double amount = request getAmount();if (amount = LIMIT) {System out println( V P + getName() + has authorized the PR ? + request);return true;} else {//forward the request to the next handlerreturn getNextHandler() authorize(request);}}}//End of classclass PresidentCOO extends PRHandler {static double LIMIT = ;public PresidentCOO(String name) {super(name);}public boolean authorize(PurchaseRequest request) {double amount = request getAmount();if (amount = LIMIT) {System out println( President COO + getName() + has authorized the PR ? + request);return true;} else {System out println( PR ? + request + couldn t be authorized \n + Executive Board needs to be + consulted for approval \n + reason: Amount too large );return false;}}}//End of class为了授权购买请求 客户端需要 ( )创建一个可能接受购买请求的授权对象集合 把他们按照授权金额升序进行排列 使用setNextHandler(PRHandler)方法 连接每一个授权者 下面是可能的授权购买请求的授权链表: Figure lishixinzhi/Article/program/Java/gj/201311/27453
Q3: 用java代码实现责任链模式的骨干代码
//----------------先写java项目责任链代码了个java项目责任链代码,功能是实现了java项目责任链代码,有待改进-----------
import java.util.ArrayList;
import java.util.List;
/**
* 现有ListSourceBean类型的List对象,
* 现在需要将该List对象中a是奇数或者b100的对象过滤掉,
* 请用责任链模式实现此段代码。
* @author Administrator
*
*/
public class Chain_test1 {
public static void main(String[] args) {
ListSourceBean list = new ArrayListSourceBean();
SourceBean bean1 = new SourceBean(1, 100);
SourceBean bean2 = new SourceBean(2, 200);
SourceBean bean3 = new SourceBean(3, 100);
SourceBean bean4 = new SourceBean(4, 100);
SourceBean bean5 = new SourceBean(5, 20);
SourceBean bean6 = new SourceBean(6, 200);
list.add(bean1);
list.add(bean2);
list.add(bean3);
list.add(bean4);
list.add(bean5);
list.add(bean6);
System.out.println("过滤前List中的内容");
printList(list);
// 装配 链条
Filter oddFilter = new OddFilter();
//为了保持Filter里面的逻辑不混乱,OddFilter仅过滤奇数,CompareFilter仅仅过滤b100
//这里对奇数过滤两次,
//即,过滤掉b100和a是奇数 共存的情形
Filter oddFilter2 = new OddFilter();
Filter compareFilter = new CompareFilter();
oddFilter.setFilter(null);
compareFilter.setFilter(oddFilter);
oddFilter2.setFilter(compareFilter);
// 进行过滤
oddFilter2.doFilter(list);
System.out.println("\n过滤后List中的内容");
printList(list);
}
public static void printList(ListSourceBean list){
for(SourceBean s: list){
System.out.print(s.toString());
}
}
}
class Filter{
private Filter filter;
public void doFilter(ListSourceBean list){
if (filter != null){
filter.doFilter(list);
}else{
System.out.println("处理结束");
}
}
public void setFilter(Filter filter){
this.filter = filter;
}
}
/**
* 仅仅过滤b100
*/
class CompareFilter extends Filter{
public void doFilter(ListSourceBean list){
for(int i= 0; i list.size(); i++){
if(list.get(i).getB() 100 ){//b100
list.remove(i);//移除该对象
}else{//交给其他Filter处理
super.doFilter(list);
}
}
}
}
/**
* 仅过滤a为奇数
*/
class OddFilter extends Filter{
public void doFilter(ListSourceBean list){
for(int i= 0; i list.size(); i++){
if(list.get(i).getA() % 2 != 0){//非偶数
list.remove(i);//移除该对象
}else{//交给其他Filter处理
super.doFilter(list);
}
}
}
}
class SourceBean {
private int a;
private int b;
public SourceBean(int a, int b){
this.a = a;
this.b = b;
}
public SourceBean(){
}
public String toString(){
return "[a="+a+", b="+b+"] ";
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public void setB(int b) {
this.b = b;
}
public int getB() {
return b;
}
}
//------------------------执行结果----------------------------
过滤前List中的内容
[a=1, b=100] [a=2, b=200] [a=3, b=100] [a=4, b=100] [a=5, b=20] [a=6, b=200]
过滤后List中的内容
[a=4, b=100]
关于java项目责任链代码和java职责链设计模式的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






