责任链模式和外观模式

1.责任链设计模式
使多个对象都有机会处理请求,将这些对象连成一条链,并沿着这条链处理该请求,只道有对象处理他为止。

2.门面设计模式
要求一个子系统的外部与其内部通信必须通过一个统一的对象进行,又称之为外观模式,提供一个高层次的接口,使得子系统更易于使用。 说白了就是方法封装。

还是以百度云盘登录有qq和微信两个系统为例

userInfo用户信息

public class UserInfo {
    public String userName;
    public String userPwd;
    public String userId;
    public String userSex;

    public UserInfo(String userName, String userPwd, String userId, String userSex) {
        this.userName = userName;
        this.userPwd = userPwd;
        this.userId = userId;
        this.userSex = userSex;
    }

    @Override
    public String toString() {
        return "UserInfo{" +
                "userName='" + userName + '\'' +
                ", userPwd='" + userPwd + '\'' +
                ", userId='" + userId + '\'' +
                ", userSex='" + userSex + '\'' +
                '}';
    }
}

用户系统接口

public interface IUserSystem {
    public  UserInfo queryUserInfo(String name, String pwd);
}

责任链接口

public interface IUserSystemHandle<T extends IUserSystemHandle> {
    public void nextHandler(T systemHandler);
}

AbsUserSystemHandler责任链基类

public abstract class AbsUserSystemHandler implements IUserSystemHandle<AbsUserSystemHandler>,IUserSystem{
    private AbsUserSystemHandler nextHandler;

    public AbsUserSystemHandler getNextHandler() {
        return nextHandler;
    }

    @Override
    public void nextHandler(AbsUserSystemHandler systemHandler) {
        this.nextHandler=systemHandler;
    }
}

qq用户系统

public class QQUserSystem extends AbsUserSystemHandler {
    private List<UserInfo> userInfos;

    public QQUserSystem() {
        userInfos = new ArrayList<>();
        userInfos.add(new UserInfo("Peakmain", "1234", "001", "男"));
        userInfos.add(new UserInfo("Treasure", "1234", "002", "女"));
        userInfos.add(new UserInfo("Jack", "abcd", "003", "男"));
    }


    @Override
    public UserInfo queryUserInfo(String name, String pwd) {
        for (UserInfo userInfo : userInfos) {
            if (userInfo.userName.equals(name) && userInfo.userPwd.equals(pwd)) {
                return userInfo;
            }
        }
        //没有就交给下一个
        AbsUserSystemHandler handler = getNextHandler();
        if (handler != null) {
            return handler.queryUserInfo(name,pwd);
        }
        return null;
    }
}

微信用户系统

public class WXUserSystem extends AbsUserSystemHandler {
    private UserInfo[] userInfos;

    public WXUserSystem() {
        userInfos = new UserInfo[3];
        userInfos[0] = new UserInfo("奋斗@加油", "1234", "001", "男");
        userInfos[1] = new UserInfo("芊芊", "1234", "002", "女");
        userInfos[2] = new UserInfo("太想爱你", "1234", "003", "男");
    }


    @Override
    public UserInfo queryUserInfo(String name, String pwd) {
        for (UserInfo userInfo : userInfos) {
            if (userInfo.userName.equals(name) && userInfo.userPwd.equals(pwd)) {
                return userInfo;
            }
        }
        //没有就交给下一个
        AbsUserSystemHandler handler = getNextHandler();
        if (handler != null) {
            return handler.queryUserInfo(name,pwd);
        }
        return null;
    }
}

测试

QQUserSystem qqUserSystem = new QQUserSystem();
        WXUserSystem wxUserSystem = new WXUserSystem();
        qqUserSystem.nextHandler(wxUserSystem);
        UserInfo userInfo = qqUserSystem.queryUserInfo("爱我的你", "1234");
        System.out.println(userInfo);

外观设计模式UserSystemFacade封装

public class UserSystemFacade implements IUserSystem {
    private AbsUserSystemHandler mHandler;
    public UserSystemFacade(){
        mHandler = new QQUserSystem();
        WXUserSystem wxUserSystem = new WXUserSystem();
        mHandler.nextHandler(wxUserSystem);
    }
    @Override
    public UserInfo queryUserInfo(String name, String pwd) {

           return mHandler.queryUserInfo(name,pwd);
    }
}

测试

  UserSystemFacade userSystemFacade=new UserSystemFacade();
        UserInfo userInfo = userSystemFacade.queryUserInfo("芊芊", "1234");
        System.out.println(userInfo);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值