java订单怎么做_java订单号怎么做

news/2024/7/5 23:17:30

说一说我的一点看法:一、优惠策略有多种形式,但是无论哪种都是在所选购商品种类、数量以及订单金额上做文章,因此可以设计一个通用的过滤器Filter,它接受一个订单(账号、商品号、数量、单价、总价)作为输入,同时返回一个新的订单(账号、商品号、数量、单价、总价、优惠类型),每一个Filter都可以在内部定义一套优惠方案。二、优惠策略的组合方式有1.可叠加的(买二送一、满500打7折可以同时使用)2.选最有利的(满500减100和会员卡打7折不能同时使用,但是可以选择其中一个使得价格最低)3.互斥的(促销商品不能同时享受满减优惠)等多种情况。因此为Filter设计一套组合系统: 每一个Filter内部都可以由其他的Filter组合而成,并有如下几种方式:1.并联(选最大优惠/最小优惠)2.优先级(当多个优惠策略同时满足时,选优先级最高的)3.串联(可以同时使用)三、针对常见的优惠(如满减、满送、折扣等)做一套模板,可以随时使用参数进行实例化: 例如满减: OffAtFilterFactory(type, off, at)可以指定type类型商品满at的时候减去off,并产生一个相应的Filter以供使用。 每出现新的优惠,就手动画一画图,把优先级、串并联关系捋清,然后从最内层开始构造Filter,层层嵌套起来(想来也不会超过三层吧)。 之后做一套配置系统,使用XML也好JSON也好,可以直接把优惠写在配置文件里,Filter的生成、组合都由程序读取配置文件后自动进行。 最好的莫过于做一套图形化配置系统,可以通过拖模块画图的方式来写生成配置文件。实现的话,简单说一下吧,做到手动写Filter还是不难的,至于怎么根据配置文件生成代码,就需要较大篇幅这里就不提了。看你加了Java话题,我没正经用过Java,就只说一下伪代码哈哈:class Order {//存储订单的各项信息}//这个类要作为一个抽象类abstract class Filter {//构造函数什么的

//对订单o执行操作

abstract Order apply(Order o);}//这个类是最基础的,非组合式的Filter,也就是说它只能完成一个优惠策略class PrimitiveFilter extends Filter {boolean fit(Order o) {

//返回o是否符合优惠条件

}

Order apply(Order o) {

//直接对o进行操作,获取订单信息,根据优惠策略生成对应的优惠后的订单并返回

}}class ParallelFilter extends Filter {Vector pvf; //pvf按照优先级存储各个Filter

Boolean fit(Order o) {

//按照优先级(使用i从0到pvf.length迭代),判断订单o是否符合pvf[i]中的条件(使用fit方法),如果发现符合的,就返回true

//都不符合返回false

}

Order apply(Order o) {

//按照优先级(使用i从0到pvf.length迭代),判断订单o是否符合pvf[i]中的条件(使用fit方法),如果符合,即返回pvf[i].apply(o)

//如果不符合,继续判断下一个Filter

//如果所有的Filter都不符合,返回原订单

}}class SerialFilter extends Filter {Vector svf; //按照串联顺序存储Filter(其实这个也没什么顺序可言)

Boolean fit(Order o) {

//svf中所有Filter都符合才返回true

//有一个不符合就返回false

}

Order apply(Order o) {

//按顺序把o通过所有的Filter

//用Vector的reduce方法就好了,不知道Java里有没有

//没有的话:

Order t = o;

for (Filter f in svf) {

t = f(t);

}

return t;

}}上面这些就足够实现三种优惠组合方案啦。


http://www.niftyadmin.cn/n/4024281.html

相关文章

设置垂直居中

align-self: center; align-items: center; justify-content: center; 复制代码转载于:https://juejin.im/post/5a310057f265da43070343dc

两种去掉chrome浏览器中自动补全黄色背景的方法

input:-webkit-autofill {-webkit-box-shadow: 0 0 0px 1000px rgba(255, 255, 255, 1) inset !important;} 复制代码input:-webkit-autofill {-webkit-animation-name: autofill;-webkit-animation-fill-mode: both; } -webkit-keyframes autofill {to {color: #000;backgroun…

【Charles】Https抓包

1、安装根证书 2、模拟器安装证书 3、在需要抓包的域名勾选Enable SSL Proxying 现在就可以看到数据了。 Enable SSL Proxying的域名在这里也可以看到 Android手机安装证书 用QQ浏览器或者UC打开 chls.pro/ssl,需要输入证书名称可以随便填写,然后自己下载…

ReactNative iOS源码解析(二)

迁移老文章到掘金(基于RN 0.26) 相关系列文章 ReactNative iOS源码解析(一)ReactNative iOS源码解析(二)Talk about ReactNative Image Component上一篇了解了 ReactNative是如何初始化一整套JS/OC通信机制…

Karma-Jasmine 安装和使用

注意:本文中出现的资料链接、karma的插件安装等,均可能需要翻$墙后才能正确执行。 Jasmine是一个Javascript的测试工具,在Karma上运行Jasmine可完成Javascript的自动化测试、生成覆盖率报告等。本文不包含Jasmine的使用细节,这几天…

192_C++_模拟实现智能指针的操作

#include <iostream>using namespace std;class test {public:int val;test(int midval){this->val = midval;}

htrn

hgyrt转载于:https://www.cnblogs.com/raoxu/p/4947808.html

193_QT_设置标签、按钮、文本框中的字体颜色,控件都是圆角+透明样式

代码&#xff1a; /** 12.04* 设置标签、按钮、文本框中的字体颜色* 设置密码登录界面的控件都是圆角透明样式*/QPalette palette;palette.setColor(QPalette::Text, QColor(247, 122, 16));ui->label->setStyleSheet ("border:2px groove gray;border-radius:10px;…