桥接模式 实现第三方账号登录

目录​​​​​​​

项目需求

要求

桥接模式组成

abstraction-抽象化角色

implementot-实现化角色

refinedAbstraction-修正抽象化角色

concreteImplementor-具体实现化角色

优点

代码实现


项目需求

简化用户的登录注册流程,允许用户直接使用经过授权的第三方账号登录

要求

  • 遵循开闭原则:可以新增抽象部分和实现部分,且他们之间不会相互影响
  • 遵循单依职责原则:抽象部分专注于处理高层逻辑,实现部分处理平台细节

桥接模式组成

abstraction-抽象化角色

它的主要职责是定义出该角色的行为, 同事保存一个对实现化角色的引用,该角色一般是抽象类

implementot-实现化角色

它是接口或者抽象类, 定义橘色必须的行为和属性

refinedAbstraction-修正抽象化角色

它引用实现化角色对抽象化角色进行修正

concreteImplementor-具体实现化角色

它实现接口或抽象类定义的方法和属性

优点

  • 抽象和实现分离
  • 优秀的扩充能力
  • 实现细节对客户透明

代码实现

public interface LoginFunc {
    boolean login(String name, String pwd, String type);
}


public class WxLoginFunc implements LoginFunc{
    @Override
    public boolean login(String name, String pwd, String type) {
        // 进行第三方登陆的流程
        System.out.println("微信验证通过,可以登陆。");
        return true;
    }
}

public class ZfbLoginFunc implements LoginFunc{
    @Override
    public boolean login(String name, String pwd, String type) {
        // 进行第三方登陆的流程
        System.out.println("支付宝验证通过,可以登陆。");
        return true;
    }
}



public abstract class AbstractLoginProcessor {
    protected LoginFunc loginFunc;

    public AbstractLoginProcessor(LoginFunc loginFunc) {
        this.loginFunc = loginFunc;
    }

    public abstract boolean loginExecute(String name, String pwd, String type);
}


public class ThirdPartLogin extends AbstractLoginProcessor{
    
    public ThirdPartLogin(LoginFunc loginFunc) {
        super(loginFunc);
    }

    @Override
    public boolean loginExecute(String name, String pwd, String type) {
        return super.loginFunc.login(name, pwd, type);
    }
}


public Boolean login(String name, String pwd, String type) {
        // 这里可以用享元优化减少对象创建
        if (type.equals("wx")){
            LoginFunc loginFunc = new WxLoginFunc();
            AbstractLoginProcessor processor = new ThirdPartLogin(loginFunc);
            processor.loginExecute(name, pwd, type);
        }
        return true;
    }

你可能感兴趣的:(设计模式,桥接模式)