设计模式之责任链模式

来源:互联网 发布:js 获取object类型 编辑:程序博客网 时间:2024/06/12 20:42

描述:古代女子是有“三从四德”的传统,就是说家里的女人有事情需要首先请示自己的父亲,然后是丈夫和儿子,优先级父亲>丈夫>儿子,假如父亲过世女子就要请示丈夫,如果丈夫过世,就要请示儿子。

UML类图如下所示:



测试代码如下:

1、女性接口类

package com.java.responsiblechain;public interface IWoman {public void request();public int getType();}

2、女性接口实现类

package com.java.responsiblechain;public class ConcreteWoman implements IWoman {private int type;public ConcreteWoman(int type) {this.type = type;}@Overridepublic void request() {System.out.println("女人发出逛街的需求...");}@Overridepublic int getType() {return type;}}

3、责任链处理请求抽象类

package com.java.responsiblechain;public abstract class RequirementHandler {private IWoman woman;private RequirementHandler handler;public RequirementHandler(){}public RequirementHandler(IWoman woman, RequirementHandler handler) {this.woman = woman;this.handler = handler;}public void setNext(RequirementHandler handler){this.handler = handler;}public void handleRequirement(){int type = woman.getType();switch(type){case 1://向父亲进行请示handler.response();break;case 2://想丈夫进行请示handler.response();break;case 3://想儿子进行请示handler.response();break;default:break;}}public abstract void response();}

4、具体的实现类

package com.java.responsiblechain;public class Father extends RequirementHandler {@Overridepublic void response() {System.out.println("女人向父亲请示...");System.out.println("父亲表示同意...");}}
package com.java.responsiblechain;public class Husband extends RequirementHandler {@Overridepublic void response() {System.out.println("女人向丈夫请示...");System.out.println("丈夫表示同意...");}}
package com.java.responsiblechain;public class Son extends RequirementHandler {@Overridepublic void response() {System.out.println("女人向儿子请示...");System.out.println("儿子表示同意...");}}

5、测试类

package com.java.responsiblechain;import java.util.ArrayList;import java.util.List;public class ResponsibleChainTest {public static void main(String[] args) {List<IWoman> list = new ArrayList<IWoman>();for(int i = 0; i < 5; i++){IWoman woman = new ConcreteWoman(i);list.add(woman);}//Father father = new Father();Husband husband = new Husband();Son son = new Son();father.setNext(husband);husband.setNext(son);for(IWoman woman : list){if(woman.getType() == 1){woman.request();father.response();}else if(woman.getType() == 2){woman.request();husband.response();}else if(woman.getType() == 3){woman.request();son.response();}}}}


6、测试结果:

女人发出逛街的需求...女人向父亲请示...父亲表示同意...女人发出逛街的需求...女人向丈夫请示...丈夫表示同意...女人发出逛街的需求...女人向儿子请示...儿子表示同意...


0 0
原创粉丝点击