Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
门心叼龙
itstack-demo-design
提交
8910b084
I
itstack-demo-design
项目概览
门心叼龙
/
itstack-demo-design
通知
4
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
I
itstack-demo-design
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
8910b084
编写于
6月 14, 2020
作者:
小傅哥
⛹
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
小傅哥 | 重学 Java 设计模式:实战享元模式「基于Redis秒杀,提供活动与库存信息查询场景」
上级
0d02ca6a
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
319 addition
and
0 deletion
+319
-0
itstack-demo-design-11-01/pom.xml
itstack-demo-design-11-01/pom.xml
+23
-0
itstack-demo-design-11-01/src/main/java/org/itstack/demo/design/ActivityController.java
...main/java/org/itstack/demo/design/ActivityController.java
+24
-0
itstack-demo-design-11-01/src/test/java/org/itstack/demo/design/test/ApiTest.java
...1/src/test/java/org/itstack/demo/design/test/ApiTest.java
+28
-0
itstack-demo-design-11-02/pom.xml
itstack-demo-design-11-02/pom.xml
+28
-0
itstack-demo-design-11-02/src/main/java/org/itstack/demo/design/Activity.java
...11-02/src/main/java/org/itstack/demo/design/Activity.java
+66
-0
itstack-demo-design-11-02/src/main/java/org/itstack/demo/design/ActivityController.java
...main/java/org/itstack/demo/design/ActivityController.java
+22
-0
itstack-demo-design-11-02/src/main/java/org/itstack/demo/design/ActivityFactory.java
...rc/main/java/org/itstack/demo/design/ActivityFactory.java
+31
-0
itstack-demo-design-11-02/src/main/java/org/itstack/demo/design/Stock.java
...gn-11-02/src/main/java/org/itstack/demo/design/Stock.java
+33
-0
itstack-demo-design-11-02/src/main/java/org/itstack/demo/design/util/RedisUtils.java
...rc/main/java/org/itstack/demo/design/util/RedisUtils.java
+31
-0
itstack-demo-design-11-02/src/test/java/org/itstack/demo/design/test/ApiTest.java
...2/src/test/java/org/itstack/demo/design/test/ApiTest.java
+31
-0
pom.xml
pom.xml
+2
-0
未找到文件。
itstack-demo-design-11-01/pom.xml
0 → 100644
浏览文件 @
8910b084
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
itstack-demo-design
</artifactId>
<groupId>
org.itstack
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
itstack-demo-design-11-01
</artifactId>
<dependencies>
<dependency>
<groupId>
org.itstack
</groupId>
<artifactId>
itstack-demo-design-11-02
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<scope>
compile
</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
itstack-demo-design-11-01/src/main/java/org/itstack/demo/design/ActivityController.java
0 → 100644
浏览文件 @
8910b084
package
org.itstack.demo.design
;
import
java.util.Date
;
/**
* 博客:https://bugstack.cn - 沉淀、分享、成长,让自己和他人都能有所收获!
* 公众号:bugstack虫洞栈
* Create by 小傅哥(fustack) @2020
*/
public
class
ActivityController
{
public
Activity
queryActivityInfo
(
Long
id
)
{
// 模拟从实际业务应用从接口中获取活动信息
Activity
activity
=
new
Activity
();
activity
.
setId
(
10001L
);
activity
.
setName
(
"图书嗨乐"
);
activity
.
setDesc
(
"图书优惠券分享激励分享活动第二期"
);
activity
.
setStartTime
(
new
Date
());
activity
.
setStopTime
(
new
Date
());
activity
.
setStock
(
new
Stock
(
1000
,
1
));
return
activity
;
}
}
itstack-demo-design-11-01/src/test/java/org/itstack/demo/design/test/ApiTest.java
0 → 100644
浏览文件 @
8910b084
package
org.itstack.demo.design.test
;
import
com.alibaba.fastjson.JSON
;
import
org.itstack.demo.design.Activity
;
import
org.itstack.demo.design.ActivityController
;
import
org.junit.Test
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
/**
* 博客:https://bugstack.cn - 沉淀、分享、成长,让自己和他人都能有所收获!
* 公众号:bugstack虫洞栈
* Create by 小傅哥(fustack) @2020
*/
public
class
ApiTest
{
private
Logger
logger
=
LoggerFactory
.
getLogger
(
ApiTest
.
class
);
private
ActivityController
activityController
=
new
ActivityController
();
@Test
public
void
test_queryActivityInfo
()
{
Long
req
=
10001L
;
Activity
activity
=
activityController
.
queryActivityInfo
(
req
);
logger
.
info
(
"测试结果:{} {}"
,
req
,
JSON
.
toJSONString
(
activity
));
}
}
itstack-demo-design-11-02/pom.xml
0 → 100644
浏览文件 @
8910b084
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<parent>
<artifactId>
itstack-demo-design
</artifactId>
<groupId>
org.itstack
</groupId>
<version>
1.0-SNAPSHOT
</version>
</parent>
<modelVersion>
4.0.0
</modelVersion>
<artifactId>
itstack-demo-design-11-02
</artifactId>
<build>
<finalName>
itstack-demo-design-11-02
</finalName>
<plugins>
<plugin>
<groupId>
com.zenjava
</groupId>
<artifactId>
javafx-maven-plugin
</artifactId>
<version>
8.8.3
</version>
<configuration>
<mainClass>
org.itstack.demo.desgin.Application
</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
itstack-demo-design-11-02/src/main/java/org/itstack/demo/design/Activity.java
0 → 100644
浏览文件 @
8910b084
package
org.itstack.demo.design
;
import
java.util.Date
;
/**
* 博客:https://bugstack.cn - 沉淀、分享、成长,让自己和他人都能有所收获!
* 公众号:bugstack虫洞栈
* Create by 小傅哥(fustack) @2020
*/
public
class
Activity
{
private
Long
id
;
// 活动ID
private
String
name
;
// 活动名称
private
String
desc
;
// 活动描述
private
Date
startTime
;
// 开始时间
private
Date
stopTime
;
// 结束时间
private
Stock
stock
;
// 活动库存
public
Long
getId
()
{
return
id
;
}
public
void
setId
(
Long
id
)
{
this
.
id
=
id
;
}
public
String
getName
()
{
return
name
;
}
public
void
setName
(
String
name
)
{
this
.
name
=
name
;
}
public
String
getDesc
()
{
return
desc
;
}
public
void
setDesc
(
String
desc
)
{
this
.
desc
=
desc
;
}
public
Date
getStartTime
()
{
return
startTime
;
}
public
void
setStartTime
(
Date
startTime
)
{
this
.
startTime
=
startTime
;
}
public
Date
getStopTime
()
{
return
stopTime
;
}
public
void
setStopTime
(
Date
stopTime
)
{
this
.
stopTime
=
stopTime
;
}
public
Stock
getStock
()
{
return
stock
;
}
public
void
setStock
(
Stock
stock
)
{
this
.
stock
=
stock
;
}
}
itstack-demo-design-11-02/src/main/java/org/itstack/demo/design/ActivityController.java
0 → 100644
浏览文件 @
8910b084
package
org.itstack.demo.design
;
import
org.itstack.demo.design.util.RedisUtils
;
/**
* 博客:https://bugstack.cn - 沉淀、分享、成长,让自己和他人都能有所收获!
* 公众号:bugstack虫洞栈
* Create by 小傅哥(fustack) @2020
*/
public
class
ActivityController
{
private
RedisUtils
redisUtils
=
new
RedisUtils
();
public
Activity
queryActivityInfo
(
Long
id
)
{
Activity
activity
=
ActivityFactory
.
getActivity
(
id
);
// 模拟从Redis中获取库存变化信息
Stock
stock
=
new
Stock
(
1000
,
redisUtils
.
getStockUsed
());
activity
.
setStock
(
stock
);
return
activity
;
}
}
itstack-demo-design-11-02/src/main/java/org/itstack/demo/design/ActivityFactory.java
0 → 100644
浏览文件 @
8910b084
package
org.itstack.demo.design
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* 博客:https://bugstack.cn - 沉淀、分享、成长,让自己和他人都能有所收获!
* 公众号:bugstack虫洞栈
* Create by 小傅哥(fustack) @2020
*/
public
class
ActivityFactory
{
static
Map
<
Long
,
Activity
>
activityMap
=
new
HashMap
<
Long
,
Activity
>();
public
static
Activity
getActivity
(
Long
id
)
{
Activity
activity
=
activityMap
.
get
(
id
);
if
(
null
==
activity
)
{
// 模拟从实际业务应用从接口中获取活动信息
activity
=
new
Activity
();
activity
.
setId
(
10001L
);
activity
.
setName
(
"图书嗨乐"
);
activity
.
setDesc
(
"图书优惠券分享激励分享活动第二期"
);
activity
.
setStartTime
(
new
Date
());
activity
.
setStopTime
(
new
Date
());
activityMap
.
put
(
id
,
activity
);
}
return
activity
;
}
}
itstack-demo-design-11-02/src/main/java/org/itstack/demo/design/Stock.java
0 → 100644
浏览文件 @
8910b084
package
org.itstack.demo.design
;
/**
* 博客:https://bugstack.cn - 沉淀、分享、成长,让自己和他人都能有所收获!
* 公众号:bugstack虫洞栈
* Create by 小傅哥(fustack) @2020
*/
public
class
Stock
{
private
int
total
;
// 库存总量
private
int
used
;
// 库存已用
public
Stock
(
int
total
,
int
used
)
{
this
.
total
=
total
;
this
.
used
=
used
;
}
public
int
getTotal
()
{
return
total
;
}
public
void
setTotal
(
int
total
)
{
this
.
total
=
total
;
}
public
int
getUsed
()
{
return
used
;
}
public
void
setUsed
(
int
used
)
{
this
.
used
=
used
;
}
}
itstack-demo-design-11-02/src/main/java/org/itstack/demo/design/util/RedisUtils.java
0 → 100644
浏览文件 @
8910b084
package
org.itstack.demo.design.util
;
import
java.util.concurrent.Executors
;
import
java.util.concurrent.ScheduledExecutorService
;
import
java.util.concurrent.TimeUnit
;
import
java.util.concurrent.atomic.AtomicInteger
;
/**
* 博客:https://bugstack.cn - 沉淀、分享、成长,让自己和他人都能有所收获!
* 公众号:bugstack虫洞栈
* Create by 小傅哥(fustack) @2020
*/
public
class
RedisUtils
{
private
ScheduledExecutorService
scheduledExecutorService
=
Executors
.
newScheduledThreadPool
(
1
);
private
AtomicInteger
stock
=
new
AtomicInteger
(
0
);
public
RedisUtils
()
{
scheduledExecutorService
.
scheduleAtFixedRate
(()
->
{
// 模拟库存消耗
stock
.
addAndGet
(
1
);
},
0
,
100000
,
TimeUnit
.
MICROSECONDS
);
}
public
int
getStockUsed
()
{
return
stock
.
get
();
}
}
itstack-demo-design-11-02/src/test/java/org/itstack/demo/design/test/ApiTest.java
0 → 100644
浏览文件 @
8910b084
package
org.itstack.demo.design.test
;
import
com.alibaba.fastjson.JSON
;
import
org.itstack.demo.design.Activity
;
import
org.itstack.demo.design.ActivityController
;
import
org.junit.Test
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
/**
* 博客:https://bugstack.cn - 沉淀、分享、成长,让自己和他人都能有所收获!
* 公众号:bugstack虫洞栈
* Create by 小傅哥(fustack) @2020
*/
public
class
ApiTest
{
private
Logger
logger
=
LoggerFactory
.
getLogger
(
ApiTest
.
class
);
private
ActivityController
activityController
=
new
ActivityController
();
@Test
public
void
test_queryActivityInfo
()
throws
InterruptedException
{
for
(
int
idx
=
0
;
idx
<
10
;
idx
++)
{
Long
req
=
10001L
;
Activity
activity
=
activityController
.
queryActivityInfo
(
req
);
logger
.
info
(
"测试结果:{} {}"
,
req
,
JSON
.
toJSONString
(
activity
));
Thread
.
sleep
(
1200
);
}
}
}
pom.xml
浏览文件 @
8910b084
...
...
@@ -36,6 +36,8 @@
<module>
itstack-demo-design-10-00
</module>
<module>
itstack-demo-design-10-01
</module>
<module>
itstack-demo-design-10-02
</module>
<module>
itstack-demo-design-11-02
</module>
<module>
itstack-demo-design-11-01
</module>
</modules>
<dependencies>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录