第三方登录场景桥接模式

Posted 我是廖志伟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三方登录场景桥接模式相关的知识,希望对你有一定的参考价值。

文章目录

创建design-demo项目

项目代码:https://gitee.com/java_wxid/java_wxid/tree/master/demo/design-demo
项目结构如下(示例):

创建UserController

代码如下(示例):

package com.example.designdemo.controller;

import com.example.designdemo.pojo.TicketParam;
import com.example.designdemo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;

/**
 * @Author: zhiwei Liao
 * @Date: 2022/9/25 19:26
 * @Description:
 */
@RestController
public class UserController 

    @Autowired
    private UserService userService;

    @PostMapping("/login")
    public Boolean login(@RequestParam String name, @RequestParam String pwd, @RequestParam String type) 
        return userService.login(name, pwd, type);
    


创建UserService

代码如下(示例):

package com.example.designdemo.service;

import com.example.designdemo.pojo.TicketParam;

import java.util.List;

/**
 * @Author: zhiwei Liao
 * @Date: 2022/9/25 9:28
 * @Description:
 */

public interface UserService 

    Boolean login(String name, String pwd, String type);



创建UserServiceImpl

代码如下(示例):

package com.example.designdemo.service.impl;

import com.example.designdemo.handler.SuggestRequirementHandlerProcess;
import com.example.designdemo.implementor.LoginFunc;
import com.example.designdemo.implementor.WbLoginFunc;
import com.example.designdemo.implementor.abstractlogin.AbstractLoginProcessor;
import com.example.designdemo.implementor.abstractlogin.ThirdPartLogin;
import com.example.designdemo.pojo.TicketParam;
import com.example.designdemo.pojo.UserInfo;
import com.example.designdemo.service.UserService;
import com.example.designdemo.ticket.builder.CompanyTicketBuilder;
import com.example.designdemo.ticket.builder.PersonalTicketBuilder;
import com.example.designdemo.ticket.builder.TicketBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;

@Service
public class UserServiceImpl implements UserService 


    public Boolean login(String name, String pwd, String type) 

        // 这部分我就不进行封装了,直接在 service里做了。小伙伴可以自行实现封装,类似享元。
        // 这部分是桥接模式的实现。
        if(type.equals("wb")) 
            LoginFunc func = new WbLoginFunc();
            AbstractLoginProcessor processor = new ThirdPartLogin(func);
            return processor.loginExecute(name, pwd, type);
        

        return true;
    


创建LoginFunc

代码如下(示例):

package com.example.designdemo.implementor;

public interface LoginFunc 

    public boolean login(String name, String pwd, String type);


创建WbLoginFunc

代码如下(示例):

package com.example.designdemo.implementor;

public class WbLoginFunc implements LoginFunc
    @Override
    public boolean login(String name, String pwd, String type) 
        // 进行第三方账号的校验流程。
        System.out.println("Wb 验证通过,可以登录。");
        return true;
    


创建ZfbLoginFunc

代码如下(示例):

package com.example.designdemo.implementor;

public class ZfbLoginFunc implements LoginFunc
    @Override
    public boolean login(String name, String pwd, String type) 
        // 进行第三方账号的校验流程。
        System.out.println("Zfb 验证通过,可以登录。");
        return true;
    


创建AbstractLoginProcessor

代码如下(示例):

package com.example.designdemo.implementor.abstractlogin;


import com.example.designdemo.implementor.LoginFunc;

public abstract class AbstractLoginProcessor 
    protected LoginFunc loginFunc;

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

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


创建ThirdPartLogin

代码如下(示例):

package com.example.designdemo.implementor.abstractlogin;


import com.example.designdemo.implementor.LoginFunc;

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


以上是关于第三方登录场景桥接模式的主要内容,如果未能解决你的问题,请参考以下文章

第三方登录场景桥接模式

设计模式桥接模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

桥接模式(Bridge)

小看--桥接模式

设计模式-桥接模式及使用场景

23种设计模式-桥接模式(安卓应用场景介绍)