设计模式==责任链(Chain of Responsibility)

责任链模式实现注册验证
本文介绍了一种使用责任链设计模式实现用户注册信息验证的方法。通过将不同的验证逻辑分配给独立的过滤器对象并链接起来形成一条链,使得每个过滤器负责检查特定条件,最终确保所有验证规则得到正确执行。
/*
 * 责任链(Chain of Responsibility)
 *
 *
 * 多个处理器对象连成一串,请求在这条链上传递,由该处理这个请求的处理器来处理。发出请求的客户端并不知道哪个对象处理请求。
 */

package model;

public class TestChain {
    public static void main(String[] args) {
        String pass1 = "123456";
        String pass2 = "123456";
        String personId = "123456789012345678";
        String email = "huxz@tarena.com.cn";
        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);
    }
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值