设为首页 加入收藏

TOP

按钮条件逻辑配置化的可选技术方案(五)
2018-09-05 11:46:46 】 浏览:840
Tags:按钮 条件 逻辑 配置 技术 方案
' def singleButtonCondition = SingleCondition.getInstance(singleCondJson) def valueMap = ["activity_type": 13] singleButtonCondition.satisfiedBy(valueMap) == true singleButtonCondition.getResult() == true def multiCondJson = '{"conditions": [{"field": "activity_type", "op":"eq", "value": 13}, {"field": "feedback", "op":"gt", "value": 201}], "result": false}' def multiButtonCondition = MultiCondition.getInstance(multiCondJson) def valueMap2 = ["activity_type": 13, "feedback": 250] multiButtonCondition.satisfiedBy(valueMap2) == true multiButtonCondition.getResult() == false def buttonConfigJson = '{"buttonRules": [{"cond":{"field": "activity_type", "op":"eq", "value": 63}, "result": false}, {"cond":{"field": "order_type", "op":"eq", "value": 75}, "result": false}, ' + '{"conditions": [{"field": "state", "op":"neq", "value": 10}, {"field": "order_type", "op":"eq", "value": 0}, {"field": "activity_type", "op":"neq", "value": 13}], "result": true}], "defaultResult": false}' def combinedCondition = ButtonCondition.getInstance(buttonConfigJson) def giftValueMap = ["activity_type": 63] def giftResult = combinedCondition.satisfiedBy(giftValueMap) assert giftResult == false def knowledgeva lueMap = ["activity_type": 0, "order_type": 75] def knowledgeResult = combinedCondition.satisfiedBy(knowledgeva lueMap) assert knowledgeResult == false def periodValueMap = ["state": 20, "order_type": 0, "activity_type": 0] def periodResult = combinedCondition.satisfiedBy(periodValueMap) assert periodResult == true def complexValueMap = ["state": 20, "order_type": 0, "activity_type": 13] def complexResult = combinedCondition.satisfiedBy(complexValueMap) assert complexResult == false } @Unroll @Test def "testBaseCondition"() { expect: new BaseCondition(field, op, value).test(valueMap) == result where: field | op | value | valueMap | result 'feedback' | CondOp.eq | 201 | ['feedback': 201] | true 'feedback' | CondOp.in | [201, 250] | ['feedback': 201] | true 'feedback' | CondOp.gt | 201 | ['feedback': 202] | true 'feedback' | CondOp.gte | 201 | ['feedback': 202] | true 'feedback' | CondOp.lt | 201 | ['feedback': 250] | false 'feedback' | CondOp.lte | 201 | ['feedback': 250] | false }

支持多种配置语法

以上支持了从JSON串解析按钮逻辑的条件配置。不过用JSON写逻辑表达式,还是有些不够自然,容易出错。如果能用更自然的表达语法就更好了,比如:activity_type=13 && state = 30 , result = true 。 这样需要支持多种配置语法。 可以使用策略模式和工厂模式。 凡是需要多种可替换实现的算法,通常都可以采用策略模式和工厂模式。

STEP1: 定义条件配置的解析策略接口:

package zzz.study.patterns.composite.button.strategy;

import zzz.study.patterns.composite.button.ButtonCondition;
import zzz.study.patterns.composite.button.MultiCon
首页 上一页 2 3 4 5 6 下一页 尾页 5/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Map大家族的那点事儿(3) :TreeMap 下一篇SpringBoot | 第十六章:web 应用..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目