设计模式-责任链设计模式

2017-11-23  本文已影响0人  woochen123

1.定义

使每个对象都有机会处理请求,把各个对象连成一条链,并沿着这条链处理该请求,直到有对象处理他为止

2.示例

/**
 *迭代器
 *@author woochen123
 *@time 2017/11/23 9:18
 *@desc
 */

public interface Iterator<T> {
    T next();
    boolean hasNext();
}
/**
 *qq迭代器
 *@author woochen123
 *@time 2017/11/23 9:20
 *@desc
 */

public class QQIterator implements Iterator<UserBean> {

    List<UserBean> list;
    int index;

    public QQIterator(List<UserBean> list) {
        this.list = list;
    }

    @Override
    public UserBean next() {
        return list.get(index++);
    }

    @Override
    public boolean hasNext() {
        return index < list.size();
    }

}
/**
 *微信迭代器
 *@author woochen123
 *@time 2017/11/23 9:19
 *@desc
 */
public class WxIterator implements Iterator<UserBean> {
    UserBean[] array;
    int index;

    public WxIterator(UserBean[] array) {
        this.array = array;
    }

    @Override
    public UserBean next() {
        return array[index++];
    }

    @Override
    public boolean hasNext() {
        return index < array.length;
    }

}
/**
 *用户系统连接功能
 *@author chenwuchao
 *@time 2017/11/23 10:42
 *@desc
 */
public interface IUserSystemHandler<T extends IUserSystemHandler> {
    /**
     * 下一个用户系统
     */
    void nextHandler(T iUserSystemHandler);
}
/**
 *用户系统抽象管理类
 *@author chenwuchao
 *@time 2017/11/23 13:36
 *@desc
 */
public abstract class AbrastractUserSystemHandler implements IUserSystemHandler<AbrastractUserSystemHandler>, IUserSystem, Aggregate {
    private AbrastractUserSystemHandler iUserSystemHandler;

    @Override
    public void nextHandler(AbrastractUserSystemHandler iUserSystemHandler) {
        this.iUserSystemHandler = iUserSystemHandler;
    }

    public AbrastractUserSystemHandler getiUserSystemHandler() {
        return iUserSystemHandler;
    }

    @Override
    public UserBean queryInfo(UserBean userBean) {
        Iterator<UserBean> interator = interator();
        while (interator.hasNext()) {
            UserBean next = interator.next();
            System.out.println("查询记录:" + next.getName() + " " + next.getPwd());
            if (TextUtils.equals(next.getName(), userBean.getName()) && TextUtils.equals(next.getPwd(), userBean.getPwd())) {
                return next;
            }
        }
        //没有就交给下一个
        AbrastractUserSystemHandler nextHandler = getiUserSystemHandler();
        if (nextHandler != null) {
            return nextHandler.queryInfo(userBean);
        }
        return null;
    }

}
/**
 *
 *@author woochen123
 *@time 2017/11/23 9:21
 *@desc
 */
public interface Aggregate<T> {
    /**
     * 公共接口
     * @return 返回迭代器
     */
    Iterator<T> interator();
}
/**
 *查询用户信息
 *@author woochen123
 *@time 2017/11/23 10:57
 *@desc
 */
public interface IUserSystem<T extends UserBean> {
    /**
     * 查询
     */
     T queryInfo(T userBean);
}
/**
 * qq登录系统
 * @author chenwuchao
 * @time 2017/11/22 17:14
 * @desc
 */
public class QQUserSystem extends AbrastractUserSystemHandler {
    List<UserBean> list;

    public QQUserSystem() {
        list = new ArrayList<>();
        list.add(new UserBean("小明", "12"));
        list.add(new UserBean("小红", "13"));
        list.add(new UserBean("小刚", "14"));
    }

    public List<UserBean> elements() {
        return list;
    }

    @Override
    public Iterator<UserBean> interator() {
        return new QQIterator(list);
    }

/**
 *微信登录系统
 *@author woochen123
 *@time 2017/11/23 9:23
 *@desc
 */
public class WxUserSystem extends AbrastractUserSystemHandler {
    private UserBean[] array ;

    public WxUserSystem() {
        array = new UserBean[3];
        array[0] = new UserBean("小花","12");
        array[1] = new UserBean("小华","13");
        array[2] = new UserBean("小方","14");
    }

    public UserBean[] elements() {
        return array;
    }

    @Override
    public Iterator<UserBean> interator() {
        return new WxIterator(array);
    }
}
public class Client {
    private QQUserSystem qqUserSystem;
    private WxUserSystem wxUserSystem;

    public void main() {
        UserBean userBean = new UserBean("小花", "12");
        qqUserSystem = new QQUserSystem();
        wxUserSystem = new WxUserSystem();
        qqUserSystem.nextHandler(wxUserSystem);
        UserBean userBean1 = qqUserSystem.queryInfo(userBean);
        if(userBean1 == null){
            System.out.println("登录失败!" + userBean.getName() + "   "+ userBean.getPwd());
        }else {
            System.out.println("登录成功!" + userBean.getName() + "   "+ userBean.getPwd());
        }
    }}

3.应用

View的事件分发机制

上一篇 下一篇

猜你喜欢

热点阅读