이 시리즈는 GOF의 디자인 패턴 이외의 패턴을 다룹니다.
항상 아래의 2가지를 염두해두고 사용하고자 합니다.
1. 불필요한 패턴은 복잡성을 증가시킨다.
2. 패턴이 필요하다는 의미는 언어 차원에서 지원하지 못하는 기능이 있다는 반증일 수 있다.
val tenantCallsCount = ConcurrentHashMap<String, AtomicInteger>()
override fun start() {
Timer(true).schedule(object:TimerTask() {
override fun run() { callsCount.reset() }
}, 0, throttlePeriod)
}
fun call(tenant: Tenant): Int? {
if (count.getCount(tenant.name) ?: 0 >= tenant.allowedCallsPerSecond) {
return -1
}
return count.incrementCount(tenant.name)
}