策略模式和责任链模式

一、策略模式

策略模式,就是为了解决像有很多if else这样的代码

代码如下(示例):

/**
 * 公共策略
 */
public interface IStratery {

    void operator();
}
public class StrateryA implements IStratery
{
    public void operator() {
        System.out.println("派张飞从左翼杀出");
    }
}
public class StrateryB implements IStratery
{
    public void operator() {
        System.out.println("派关羽从右翼杀出");
    }
}
public class StrateryC implements IStratery
{
    public void operator() {
        System.out.println("派赵云从中间直捣黄龙");
    }
}

public class AbstractStratery {
    private static String ZHANG_FEI="张飞";
    private static String GUAN_YU="关羽";
    private static String ZHAO_YUN="赵云";
    static Map<String,IStratery> map = new HashMap<String,IStratery>();

    static {
        map.put(ZHANG_FEI,new StrateryA());
        map.put(GUAN_YU,new StrateryB());
        map.put(ZHAO_YUN,new StrateryC());
    }

    static void  invoke(String name){
        if (name != null) {
            map.get(name).operator();
        }
    }

}

测试一下

public class Test {
    public static void main(String[] args) {
        AbstractStratery.invoke("张飞");
        AbstractStratery.invoke("关羽");
        AbstractStratery.invoke("赵云");
    }
}

在这里插入图片描述

2.责任链模式

比如说登录,校验,权限这一系列操作,假设一个场景,员工离职,层层递进,我们使用建造者模式加责任链模式试试。

/**
 * 抽象链
 */
public abstract class AbstractChain<T> {

    protected AbstractChain<T> chain;

    public void next(AbstractChain<T> chain){
        this.chain=chain;
    }

    public void doChain(String name) {
        System.out.println("开始做某事");
    }

    public static class Buider<T>{
        private AbstractChain<T> header;
        private AbstractChain<T> tail;

        public Buider<T> addChain(AbstractChain<T> chain){
            if(header==null){
                this.header= this.tail=chain;
                return this;
            }
            this.tail.next(chain);
            this.tail=chain;
            return this;
        }

        public AbstractChain<T> build(){
            return this.header;
        }

    }
}
public class Boss extends AbstractChain{

    public void doChain(String name) {
        System.out.println("boss开启欢送离职会");
    }
}
/**
 * 人力
 */
public class EmployeeA  extends  AbstractChain{


    public void doChain(String name) {
        if("离职".equals(name)){
            System.out.println("员工A无法解决离职问题,移送boss");
            chain.doChain(name);
        }else {
            System.out.println("员工A解决"+name);
        }
    }
}
/**
 * 人力
 */
public class EmployeeB extends  AbstractChain {


    public void doChain(String name) {
        if("请假".equals(name)||"离职".equals(name)){
            System.out.println("员工B无法解决请假或者离职问题,移送员工A");
            chain.doChain(name);
        }else {
            System.out.println("员工B解决"+name);
        }
    }
}
/**
 * 人力
 */
public class EmployeeC  extends  AbstractChain {



    public void doChain(String name) {
        System.out.println("基层员工开始"+name);
        chain.doChain(name);
        System.out.println("基层员工"+name+"完毕");
    }
}

测试一下

   public static void main(String[] args) {
        Boss boss = new Boss();
        AbstractChain.Buider buider = new AbstractChain.Buider();
        buider.addChain( new EmployeeC()).addChain( new EmployeeB()).addChain( new EmployeeA()).addChain(new Boss()).build();
        buider.build().doChain("离职");
    }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值