成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

二進(jìn)制在互聯(lián)網(wǎng)業(yè)務(wù)開發(fā)中的精妙應(yīng)用

開發(fā) 前端
我們可以通過枚舉實(shí)現(xiàn),每個(gè)枚舉包含2個(gè)屬性——標(biāo)識(shí)、場(chǎng)景,通過標(biāo)識(shí)來判斷活動(dòng)是否能在該場(chǎng)景中使用。

背景

在互聯(lián)網(wǎng)業(yè)務(wù)開發(fā)中,我們經(jīng)常有這樣的一個(gè)場(chǎng)景,比如有一個(gè)活動(dòng),這個(gè)活動(dòng)可以是一個(gè)紅包的活動(dòng),也可以是一個(gè)優(yōu)惠券活動(dòng),也可以是一個(gè)秒殺活動(dòng)等等,要求這個(gè)活動(dòng)只能在某些場(chǎng)景下使用。

例子:

  • 如京東上面有很多優(yōu)惠券,
  • 有的優(yōu)惠券只能在京東上使用,
  • 有的優(yōu)惠券只能在京東7Fresh上使用,
  • 有的優(yōu)惠券只能在京東、京東7Fresh上使用。

我們立馬能想到一個(gè)方案,就是新增一個(gè)活動(dòng)類型字段activityType,通過這個(gè)字段來區(qū)分這些活動(dòng)。

那么如何統(tǒng)一、高效、可擴(kuò)展地存儲(chǔ)這個(gè)活動(dòng)標(biāo)識(shí),以便后續(xù)通過這個(gè)標(biāo)識(shí),來判斷這個(gè)活動(dòng)能否在特定的某些場(chǎng)景中使用呢?

方案一

我們可以通過枚舉實(shí)現(xiàn),每個(gè)枚舉包含2個(gè)屬性——標(biāo)識(shí)、場(chǎng)景,通過標(biāo)識(shí)來判斷活動(dòng)是否能在該場(chǎng)景中使用。

1.存儲(chǔ)標(biāo)識(shí)

如只能在京東上使用的標(biāo)識(shí)為1,只能在淘寶特價(jià)版上使用的標(biāo)識(shí)為3,等等。

package com.example.activitytype.constants;

/**
* 活動(dòng)類型枚舉
*
* @author hongcunlin
*/
public enum ActivityType {
/**
* 京東
*/
JD(1, "京東"),

/**
* 京東極速版
*/
JDJSB(2, "京東極速版本"),

/**
* 京東極速版
*/
JD_JDJSB(3, "京東、京東極速版本");

/**
* 標(biāo)識(shí)
*/
public Integer code;

/**
* 場(chǎng)景
*/
public String desc;

/**
* 枚舉
*
* @param code 標(biāo)識(shí)
* @param desc 場(chǎng)景
*/
ActivityType(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
}

枚舉里邊列舉幾個(gè)活動(dòng)的類型對(duì)應(yīng)的標(biāo)識(shí),當(dāng)然這個(gè)標(biāo)識(shí)的數(shù)據(jù)類型,也可以為字符串,這里簡單采用整數(shù)來實(shí)現(xiàn)。

2.判斷使用

上面是基礎(chǔ),都是為下面的服務(wù)提供數(shù)據(jù)支撐而已,下面的服務(wù)才是我們要直面的業(yè)務(wù),如判斷這個(gè)活動(dòng)能否在京東極速版上使用,我們的實(shí)現(xiàn)方案對(duì)應(yīng)為:

package com.example.activitytype.service.impl;

import com.example.activitytype.constants.ActivityType;
import com.example.activitytype.service.ActivityTypeService;
import org.springframework.stereotype.Service;

/**
* 活動(dòng)服務(wù)
*
* @author hongcunlin
*/
@Service
public class ActivityTypeServiceImpl implements ActivityTypeService {
/**
* 能否在京東極速版使用
*
* @param code 標(biāo)識(shí)
* @return true能/false不能
*/
@Override
public boolean isCanUseInJdjsb(Integer code) {
return ActivityType.JDJSB.code.equals(code) ||
ActivityType.JD_JDJSB.code.equals(code);
// TODO 后續(xù)這里需要不斷維護(hù)
}
}

3.代碼測(cè)試

測(cè)試結(jié)果和我們預(yù)期的一樣

package com.example.activitytype;

import com.example.activitytype.service.ActivityTypeService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

@SpringBootTest
class ActivityTypeTest {
/**
* 活動(dòng)服務(wù)
*/
@Resource
private ActivityTypeService activityTypeService;

/**
* 能否在京東極速版使用測(cè)試
*/
@Test
void isCanUseInJdjsbTest() {
// 1,京東,false
System.out.println(activityTypeService.isCanUseInJdjsb(1));
// 2,京東極速版本,true
System.out.println(activityTypeService.isCanUseInJdjsb(2));
// 3,京東、京東極速版本,true
System.out.println(activityTypeService.isCanUseInJdjsb(3));
}
}

4.評(píng)價(jià)

這個(gè)方案的優(yōu)點(diǎn)就是前期實(shí)現(xiàn)起來很簡單。

缺點(diǎn)就是隨著維護(hù)的活動(dòng)類型越來越多,我們需要補(bǔ)充很多判斷語句,并且每新增1種活動(dòng)類型我們需要把涉及的方法都改一遍,這對(duì)我們開發(fā)人員來說,是完全不可接受的。

方案二

我們可以通過二進(jìn)制字符串01來存儲(chǔ)這些場(chǎng)景,0代表不能使用,1代表能使用,后續(xù)我們通過判斷二進(jìn)制字符串的某個(gè)位置的值是否為1,就可以輕松判斷是否能在這個(gè)場(chǎng)景使用了。

1.存儲(chǔ)位置

我們的枚舉,由一個(gè)籠統(tǒng)標(biāo)識(shí),改為存儲(chǔ)二進(jìn)制的位置。

package com.example.activitytype.constants;

/**
* 活動(dòng)類型枚舉
*
* @author hongcunlin
*/
public enum ActivityIndex {
/**
* 001
* 京東
*/
JD(1, "京東"),

/**
* 010
* 京東極速版
*/
JDJSB(2, "京東極速版本"),

/**
* 100
* 京東七鮮
*/
JD7F(4, "7Fresh");

/**
* 位置
*/
public Integer index;

/**
* 場(chǎng)景
*/
public String desc;

/**
* 枚舉
*
* @param index 位置
* @param desc 場(chǎng)景
*/
ActivityIndex(Integer index, String desc) {
this.index = index;
this.desc = desc;
}
}

如下圖所示,只能能在京東極速版使用的標(biāo)識(shí),我們存儲(chǔ)為2(二進(jìn)制為010),通過判斷第2位是否為1,就可以判斷是否只能在京東極速版使用了。

2.判斷使用

根據(jù)所在位為1,即可判斷能否在該場(chǎng)景下使用

package com.example.activitytype.service.impl;

import com.example.activitytype.constants.ActivityIndex;
import com.example.activitytype.service.ActivityIndexService;
import org.springframework.stereotype.Service;

/**
* 活動(dòng)服務(wù)
*
* @author hongcunlin
*/
@Service
public class ActivityIndexServiceImpl implements ActivityIndexService {
/**
* 能否在京東極速版使用
*
* @param code 標(biāo)識(shí)
* @return true能/false不能
*/
@Override
public boolean isCanUseInJdjsb(Integer code) {
// 使用 位運(yùn)算 判斷 值的二進(jìn)制 指定位是否為1
return (code & ActivityIndex.JDJSB.index) != 0;
}
}

這里采用了位運(yùn)算,簡單高效。

3.代碼測(cè)試

代碼的運(yùn)行結(jié)果,和我們預(yù)期的一樣

package com.example.activitytype;

import com.example.activitytype.service.ActivityIndexService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

@SpringBootTest
class ActivityIndexTest {
/**
* 活動(dòng)服務(wù)
*/
@Resource
private ActivityIndexService activityIndexService;

/**
* 能否在京東極速版使用測(cè)試
*/
@Test
void isCanUseInJdjsbTest() {
// 010,true
System.out.println(activityIndexService.isCanUseInJdjsb(2));
// 111,true
System.out.println(activityIndexService.isCanUseInJdjsb(7));
// 100,false
System.out.println(activityIndexService.isCanUseInJdjsb(4));
// 001,false
System.out.println(activityIndexService.isCanUseInJdjsb(1));
}
}

4.評(píng)價(jià)

我們枚舉的存儲(chǔ),不像方案一中存在冗余的特征,如JDJSB、JD_JDJSB存在交集JDJSB,這是不符合編程中的OOP思想的。

此外,我們通過位運(yùn)算判斷,速度更快,也就是說性能更好。

最后,我們的代碼后續(xù)隨著活動(dòng)類型的新增,無需開發(fā),也就是維護(hù)性更好。

最后

本文中的案例代碼已經(jīng)上傳到github了,有需要同學(xué)可以自行下載

??https://github.com/larger5/activity-type-index??

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2023-09-20 00:02:33

C++14二進(jìn)制字面量

2017-04-11 10:48:53

JS二進(jìn)制

2020-04-29 12:49:33

邊緣計(jì)算云計(jì)算大數(shù)據(jù)

2022-07-18 09:01:15

SwiftApple二進(jìn)制目標(biāo)

2009-02-27 09:37:33

Google二進(jìn)制代碼

2016-12-05 13:22:15

互聯(lián)網(wǎng)移動(dòng)互聯(lián)網(wǎng)物聯(lián)網(wǎng)

2015-06-24 15:35:54

2015-05-28 16:11:07

互聯(lián)網(wǎng)+

2022-03-05 23:15:38

大數(shù)據(jù)數(shù)據(jù)分析互聯(lián)網(wǎng)

2020-12-31 09:24:27

互聯(lián)網(wǎng)存款業(yè)務(wù)互聯(lián)網(wǎng)金融

2015-09-09 14:24:14

2019-07-18 16:10:39

半導(dǎo)體技術(shù)系統(tǒng)

2010-10-13 15:45:23

MySQL二進(jìn)制日志

2018-08-15 09:02:59

產(chǎn)業(yè)互聯(lián)網(wǎng)工業(yè)互聯(lián)網(wǎng)物聯(lián)網(wǎng)

2018-03-22 07:06:20

互聯(lián)網(wǎng)互聯(lián)網(wǎng)++互聯(lián)網(wǎng)

2025-01-26 10:21:54

2020-05-06 09:51:37

二進(jìn)制Linux命令行工具

2018-10-22 14:37:16

二進(jìn)制數(shù)據(jù)存儲(chǔ)

2022-10-31 08:02:42

二進(jìn)制計(jì)算乘法

2012-06-14 10:08:54

定制化服務(wù)器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲精品一区二区三区四区高清 | 久久久久电影 | 亚洲精品久久久9婷婷中文字幕 | 一区精品视频在线观看 | 日韩伦理电影免费在线观看 | 久久久久久综合 | 91p在线观看 | 国产一区二区三区在线看 | 91国自视频 | 国产视频二区 | 九九综合九九 | 91素人| 亚州精品天堂中文字幕 | 午夜精品久久久久久久久久久久久 | 欧美激情精品久久久久久变态 | 美女视频一区二区三区 | 超碰人人在线 | 玖玖视频国产 | 在线视频成人 | 91天堂网 | 欧美在线国产精品 | 国产精品777一区二区 | 综合久久99 | 欧美 日韩 国产 成人 在线 91 | 欧美视频在线看 | 午夜av一区二区 | 欧美成人在线网站 | 亚洲免费网站 | 91精品国产91久久综合桃花 | 伊大人久久 | 国产精品日韩欧美一区二区 | 色婷婷综合久久久久中文一区二区 | 91麻豆精品国产91久久久资源速度 | 亚洲日日夜夜 | 国产视频亚洲视频 | 亚洲最色网站 | 亚洲国产精品一区二区久久 | 伊人精品在线 | 亚洲高清在线视频 | 自拍偷拍第一页 | 在线亚洲欧美 |