Java责任链模式优雅实现,java如何实现链式编程

1,java如何实现链式编程class Apublic B getB()return new B();}}class Bpublic a getA()return new A();}}public static void main(String args[])B b =new A().getB().getA().getB();//类似于这样的}普通:1:维护性强2:对方法的返回类型无要求 imprisonment:void-type3:对程序员的业务要求适中链式:1:编程性强2:可读性强3:代码简洁4:对程序员的业务能力要求高他们最终返回的类型还是你那个类的类型,就可以无限点出方法了,就像jquery一样.
2,深入浅出什么是基于Java的责任链模式1、责任链模式就是这种“推卸”责任的模式,你的问题在我这里能解决我就解决 , 不行就把你推给另一个对象 。至于到底谁解决了这个问题了呢?我管呢!2、责任链模式由两个角色组成:1) 抽象处理者角色(Handler):它定义了一个处理请求的接口 。当然对于链子的不同实现,也可以在这个角色中实现后继链 。2) 具体处理者角色(Concrete Handler):实现抽象角色中定义的接口,并处理它所负责的请求 。如果不能处理则访问它的后继者 。至于类图不放也罢 。毕竟就是一个继承或者实现 。3、从名字上大概也能猜出这个模式的大概模样——系统中将会存在多个有类似处理能力的对象 。当一个请求触发后,请求将在这些对象组成的链条中传递,直到找到最合适的“责任”对象,并进行处理 。《设计模式》中给它的定义如下:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系 。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止 。从定义上可以看出,责任链模式的提出是为了“解耦”,以应变系统需求的变更和不明确性 。下面是《设计模式》中给出的适用范围:1) 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定 。2) 你想在不明确指定接收者的情况下,向多个对象中的一个提交一个请求 。3) 可处理一个请求的对象集合应被动态指定 。
3,java中如何实现链状列表import java.util.ArrayList;import java.util.LinkedList;public class LinkedListTest public static void main(String[] args)ArrayList al=new ArrayList();LinkedList ll=new LinkedList();long beginTime;System.out.println("==============尾部追加操作===========");beginTime=System.currentTimeMillis();for(int i=0;i<50000;i++)al.add(new Integer(i));}System.out.println("ArrayList尾部追加:"+(System.currentTimeMillis()-beginTime));beginTime=System.currentTimeMillis();for(int i=0;i<50000;i++)ll.add(new Integer(i));} System.out.println("LinkedList尾部追加:"+(System.currentTimeMillis()-beginTime));System.out.println("==============中间追加操作===========");beginTime=System.currentTimeMillis();for(int i=0;i<50000;i++)al.add(0,new Integer(i));}System.out.println("ArrayList中间追加:"+(System.currentTimeMillis()-beginTime));beginTime=System.currentTimeMillis();for(int i=0;i<50000;i++)ll.add(0,new Integer(i));} System.out.println("LinkedList中间追加:"+(System.currentTimeMillis()-beginTime));System.out.println("==============查找操作===========");beginTime=System.currentTimeMillis();for(int i=0;i<50000;i++)al.get(i);}System.out.println("ArrayList查找:"+(System.currentTimeMillis()-beginTime));beginTime=System.currentTimeMillis();for(int i=0;i<50000;i++)ll.get(i);} System.out.println("LinkedList查找:"+(System.currentTimeMillis()-beginTime)); }}【Java责任链模式优雅实现,java如何实现链式编程】
4,用java代码实现责任链模式的骨干代码//----------------先写了个,功能是实现了,有待改进-----------import java.util.ArrayList;import java.util.List;/** * 现有List<SourceBean>类型的List对象 ,  * 现在需要将该List对象中a是奇数或者b>100的对象过滤掉,* 请用责任链模式实现此段代码 。* @author Administrator * */public class Chain_test1public static void main(String[] args)List<SourceBean> list = new ArrayList<SourceBean>();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仅仅过滤b>100//这里对奇数过滤两次,//即,过滤掉b>100和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(List<SourceBean> list)for(SourceBean s: list)System.out.print(s.toString());} }}class Filter private Filter filter;public void doFilter(List<SourceBean> list)if (filter != null)filter.doFilter(list);}elseSystem.out.println("处理结束");} }public void setFilter(Filter filter)this.filter = filter; }}/** * 仅仅过滤b>100 */class CompareFilter extends Filter public void doFilter(List<SourceBean> list)for(int i= 0; i< list.size(); i++)if(list.get(i).getB() > 100 )list.remove(i);//移除该对象}elsesuper.doFilter(list);}} }}/** * 仅过滤a为奇数 */class OddFilter extends Filterpublic void doFilter(List<SourceBean> list)for(int i= 0; i< list.size(); i++)if(list.get(i).getA() % 2 != 0)list.remove(i);//移除该对象}elsesuper.doFilter(list);}}}}class SourceBeanprivate 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]5,用java代码实现责任链模式的骨干代码//----------------先写了个,功能是实现了 , 有待改进-----------import java.util.ArrayList;import java.util.List;/** * 现有List<SourceBean>类型的List对象,* 现在需要将该List对象中a是奇数或者b>100的对象过滤掉 ,  * 请用责任链模式实现此段代码 。* @author Administrator * */public class Chain_test1public static void main(String[] args)List<SourceBean> list = new ArrayList<SourceBean>();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仅仅过滤b>100//这里对奇数过滤两次,//即,过滤掉b>100和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(List<SourceBean> list)for(SourceBean s: list)System.out.print(s.toString());} }}class Filter private Filter filter; public void doFilter(List<SourceBean> list)if (filter != null)filter.doFilter(list);}elseSystem.out.println("处理结束");} } public void setFilter(Filter filter)this.filter = filter; }}/** * 仅仅过滤b>100 */class CompareFilter extends Filter public void doFilter(List<SourceBean> list)for(int i= 0; i< list.size(); i++)if(list.get(i).getB() > 100 )list.remove(i);//移除该对象}elsesuper.doFilter(list);}} }}/** * 仅过滤a为奇数 */class OddFilter extends Filterpublic void doFilter(List<SourceBean> list)for(int i= 0; i< list.size(); i++)if(list.get(i).getA() % 2 != 0)list.remove(i);//移除该对象}elsesuper.doFilter(list);}} }}class SourceBeanprivate 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]6 , java 哪些框架用到了责任链模式import java.io.*;class PurchaseRequestpublic double Amount;public int Number;publicString Purpose;};class Approverpublic Approver()public void ProcessRequest(PurchaseRequest aRequest)if(successor!=null)}public void SetSuccessor(Approver aSuccessor) private Approver successor;};class Congress extends Approver public voidProcessRequest(PurchaseRequest aRequest)if(aRequest.Amount<500000)System.out.println("Congress is processing");}else super.ProcessRequest(aRequest);}}class President extends Approver public voidProcessRequest(PurchaseRequest aRequest)if(aRequest.Amount>=500000)System.out.println("President is processing");}else super.ProcessRequest(aRequest);}}class VicePresident extends Approver public voidProcessRequest(PurchaseRequest aRequest)if(aRequest.Amount<100000)System.out.println("VicePresident is processing");}else super.ProcessRequest(aRequest);}}class Director extends Approver public voidProcessRequest(PurchaseRequest aRequest)if(aRequest.Amount<50000)System.out.println("Director is processing");}else super.ProcessRequest(aRequest);}}public class rspublic static void main(String[] args) throws IOException Congress Meeting = new Congress();President Tammy = new President();VicePresident Sam = new VicePresident();Director Larry = new Director();//Construct Chain of ResponsibilityMeeting.SetSuccessor(null);Tammy.SetSuccessor(Meeting);Sam.SetSuccessor(Tammy);Larry.SetSuccessor(Sam);PurchaseRequest aRequest = new PurchaseRequest();BufferedReader br = new BufferedReader(new InputStreamReader(System.in));aRequest.Amount=Double.parseDouble(br.readLine());Larry.ProcessRequest(aRequest);}}list.add(bean5);list.add(bean6).a = a.dofilter(list);}else{system.out.println("处理结束");}}public void setfilter(filter filter){this; class comparefilter extends filter{public void dofilter(listlist){ for(int i= 0; i< list.size();sourcebean>.dofilter(list); system.remove(i);这里对奇数过滤两次; } } } } /** * 仅过滤a为奇数 */ public class chain_test1 { public static void main(string[] args) { list list = new arraylist< i++){ if(list.get(i), 200);非偶数 list.list; /.util.arraylist; import java.util.tostring());/----------------先写了个.get(i).geta() % 2 != 0){// 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],功能是实现了,有待改进----------- import java;交给其他filter处理 super.println(" i< list.add(bean3);即.dofilter(list); } } } } class sourcebean { private int a;** * 现有list类型的list对象,* 现在需要将该list对象中a是奇数或者b> system.out.println("过滤前list中的内容"sourcebean> } } } class filter{ private filter filter;** * 仅仅过滤b> private int b; public sourcebean(int a, int b){ this;/交给其他filter处理 super.dofilter(list).out,oddfilter仅过滤奇数,comparefilter仅仅过滤b>100 //(); 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); // printlist(list); 装配 链条 filter oddfilter = new oddfilter(); //移除该对象 }else{/\n过滤后list中的内容"); printlist(list); } public static void printlist(list list){ for(sourcebean s: list){ system;100和a是奇数 共存的情形 filter oddfilter2 = new oddfilter();b>100 list.remove(i);/ sourcebean bean6 = new sourcebean(6;100的对象过滤掉;移除该对象 }else{// list; } } /.filter = filter ,  * 请用责任链模式实现此段代码 。* @author administrator * */!= null){ filter,过滤掉b> public void dofilter(list list){ if (filter ;100 */// oddfilter2.setfilter(comparefilter); list.add(bean1); 进行过滤 oddfilter2; list.add(bean2); class oddfilter extends filter{ public void dofilter(list<,///为了保持filter里面的逻辑不混乱; //.size(); i++){ if(list; list.add(bean4);); list){ for(int i= 0.print(s; filter comparefilter = new comparefilter(); oddfilter.setfilter(null); comparefilter.setfilter(oddfilter).getb() > 100 ){//.out/

    推荐阅读