patrón de estrategia de patrón de diseño java y patrón de cadena de responsabilidad (5)

fondo

Tanto el modo de estrategia como el modo de cadena de responsabilidad son modos de comportamiento. El modo de estrategia se usa en pagos, inicio de sesión y otros escenarios, y el modo de cadena de responsabilidad se usa en la verificación de inicio de sesión y la cadena de canal de netty. Estos dos patrones de diseño se pueden usar en casos similares en la vida. El siguiente código es solo para su referencia. Si hay algo mal, indíquelo, ¡gracias!

patrón de estrategia

Este caso toma como ejemplo el inicio de sesión

inserte la descripción de la imagen aquí

package com.example.strategy.strategy;

import java.util.Map;

public interface IStrategy {
    
    
    void login(Map<String,String> param);
}

package com.example.strategy.strategy;

import java.util.Map;

public class AliLogin implements IStrategy{
    
    
    @Override
    public void login(Map<String, String> param) {
    
    
        System.out.println("支付宝登录");
    }
}

package com.example.strategy.strategy;

import java.util.Map;

public class QQLogin implements IStrategy{
    
    
    @Override
    public void login(Map<String, String> param) {
    
    
        System.out.println("QQ登录");
    }
}

package com.example.strategy.strategy;

import java.util.Map;

public class WechatLogin implements IStrategy{
    
    
    @Override
    public void login(Map<String, String> param) {
    
    
        System.out.println("微信登录");
    }
}

package com.example.strategy.strategy;

import java.util.HashMap;
import java.util.Map;

public class LoginStrategy {
    
    
    public static final String ALI = "Ali";
    public static final String QQ = "Qq";
    public static final String WECHAT = "Wechat";
    public static Map<String, IStrategy> loginWays = new HashMap<>();

    static {
    
    
        loginWays.put(ALI, new AliLogin());
        loginWays.put(QQ, new QQLogin());
        loginWays.put(WECHAT, new WechatLogin());
    }

    public static IStrategy getPay(String payWay){
    
    
        return loginWays.get(payWay);
    }


}

package com.example.strategy.strategy;

import java.util.HashMap;
import java.util.Map;

public class Member {
    
    
    private String username;
    private String password;
    private String payWay;

    public Member(String username, String password) {
    
    
        this.username = username;
        this.password = password;
    }

    public String login(String payWay) {
    
    
        Map<String, String> param = new HashMap<>();
        param.put("username",username);
        param.put("password",password);
        IStrategy iStrategy = LoginStrategy.getPay(payWay);
        iStrategy.login(param);
        return "登录成功";
    }
}

package com.example.strategy.strategy;

public class StrategyPatternTest {
    
    

    public static void main(String[] args) {
    
    
        Member member = new Member("张三", "123456");
        System.out.println(member.login(LoginStrategy.ALI));
    }
}

modelo de cadena de responsabilidad

Implementado usando el patrón de colección más constructor

inserte la descripción de la imagen aquí

package com.example.strategy.chain;

public interface IChain {
    
    
    boolean doHandler(Request request);
}

package com.example.strategy.chain;

public class Validatelegal implements IChain{
    
    
    @Override
    public boolean doHandler(Request request) {
    
    
        System.out.println("省略实现。。。。。");
        return true;
    }
}

package com.example.strategy.chain;

public class ValidateNull implements IChain{
    
    
    @Override
    public boolean doHandler(Request request) {
    
    
            if(request.getParam()==null){
    
    
                System.out.println("属性为空!!");
                return false;
            }
            return true;
    }
}

package com.example.strategy.chain;

import java.util.*;

public class ValidateWhite implements IChain {
    
    
    private List<String> whites = new ArrayList<>();

    public ValidateWhite(List<String> whites) {
    
    
        this.whites = whites;
    }

    public List<String> getWhites() {
    
    
        return whites;
    }

    public void setWhites(List<String> whites) {
    
    
        this.whites = whites;
    }

    @Override
    public boolean doHandler(Request request) {
    
    
        for (Map.Entry<String, Object> map : request.getParam().entrySet()) {
    
    
            if (!whites.contains(map.getKey())) {
    
    
                System.out.println("非白名单字段");
                return false;
            }
        }
        return true;
    }
}

package com.example.strategy.chain;

import java.util.Map;

public class Request {
    
    

    private Map<String,Object> param;

    public Request(Map<String, Object> param) {
    
    
        this.param = param;
    }

    public Map<String, Object> getParam() {
    
    
        return param;
    }

    public void setParam(Map<String, Object> param) {
    
    
        this.param = param;
    }
}

package com.example.strategy.chain;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ChainPattern  {
    
    
    List<IChain> list = new ArrayList<>();



    public void doHandler(Request request) {
    
    
        Iterator<IChain> iterator = list.listIterator();
        while (iterator.hasNext()) {
    
    
            if(!iterator.next().doHandler(request)){
    
    
                return;
            }
        }
    }
}

package com.example.strategy.chain;

public class ChainPatternBuilder {
    
    
    private ChainPattern chainPattern = new ChainPattern();

    public ChainPatternBuilder addLast(IChain iChain) {
    
    
        chainPattern.list.add(iChain);
        return this;
    }

    public ChainPattern build() {
    
    
        return chainPattern;
    }

}

package com.example.strategy.chain;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ChainPatternTest {
    
    
    public static void main(String[] args) {
    
    
        List<String> whites=new ArrayList<>();
        whites.add("name");
        ChainPattern chainPattern = new ChainPatternBuilder()
                .addLast(new Validatelegal())
                .addLast(new ValidateNull())
                .addLast(new ValidateWhite(whites)).build();
        Map<String,Object> param=new HashMap();
        chainPattern.doHandler(new Request(param));
    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_40351360/article/details/128488716
Recomendado
Clasificación