策略模式与三元表达式一起消灭if else

import java.util.HashMap;

public class XuQiu {
    /**
     * 策略模式构建当池子中包含某个元素的时候,执行池子元素+1
     * 池子不包含某种元素的时候,给池子中添加元素
     * 分析:两种动作,给池子中的元素+1, 给池子中添加元素,值为1
     * 本人对策略模式的理解:主要解决的是行为【算法】的使用者 和 行为【算法】 本身的解耦合
     * 本例中XuQiu类是行为【算法】的使用者,而 Action接口及其子类是行为【算法】本身
     * 优点:结构清晰,适当符合开闭原则:假如又来一种情况,只需要增加action子类和修改响应的调用,而不用动调用者这一层了
     * 优点2: 便于将action对象优化为单例,这样效率一点也没有影响,只用new一次。
     * 缺点:多new了对象。
     * */
    public static HashMap poll;
    public static void main(String[] args) {
        poll=new HashMap();
        String key="usdt";
        for(int i=0;i<=5;i++){
            Action1.getInstance().add(poll,key);
            System.out.println(poll);
        }
    }
}

 

================行为在下面======================

import java.util.HashMap;
/**
 * 三元表达式的另外一种使用情况:三元只是需要执行某个命令,而不需要返回值时,就返回一给无用的,但是不引用
 * 这也是消灭if else的一个利器。
 */
public class Action1 implements Action {
    public static final Integer addNum = 1;
    private Action1(){}
    static Action1 action1;
    public static Action1 getInstance(){
        if(action1==null){
            action1=new Action1();
        }
        return action1;
    }

    public void add(HashMap poll, String key) {
        Integer num = poll.get(key);
        Integer integer = poll.get(key) != null ?
                poll.put(key, num + addNum)
                : Action2.getInstance().add(poll, key);
    }
}

 

 

import java.util.HashMap;
import java.util.Optional;
/**
 * 当一个对象频繁创建,并且只是使用对象方法的话,这个对象也可以单例
 * */
public class Action2 {
    public static final Integer originNum=1;
    private Action2(){
    }
    private static Action2 action2;
    public static Action2 getInstance(){
        if(null==action2){
            action2=  new Action2();
        }
        return action2;
    }

    public Integer add(HashMap poll, String key) {
        return Optional.ofNullable(poll.put(key, originNum)).orElse(2);
    }
}

你可能感兴趣的:(工具类)