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);