feat : Design Pattern - 널 객체(Null Object) 패턴 구현
This commit is contained in:
@@ -156,7 +156,13 @@
|
||||
- 프랜차이즈 기업은 이름을 갖는다.
|
||||
- 프랜차이즈 가맹점은 이름을 갖는다.
|
||||
|
||||
### 널(Null) 객체 패턴
|
||||
### 널 객체(Null Object) 패턴
|
||||
|
||||
#### 구현 요구사항
|
||||
|
||||
- 식당에서는 직원을 이름으로 관리하며 동명이인은 없다고 가정한다.
|
||||
- 이름으로 직원을 찾을 수 있고, 해당 직원에게 근무일자를 할당할 수 있다.
|
||||
- 직원은 근무일자를 고지 받으면 해당 날짜를 기억한다.
|
||||
|
||||
## 참고자료
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.nill.after
|
||||
|
||||
interface Employee {
|
||||
companion object {
|
||||
val NOT_FOUND = object : Employee {
|
||||
override val name: String
|
||||
get() = "존재하지 않음"
|
||||
|
||||
override fun memorizeWorkingDays(workingDays: List<Int>) {
|
||||
// 아무 작업도 하지 않는다.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val name: String
|
||||
var workingDays: List<Int>
|
||||
get() = listOf()
|
||||
set(workingDays) {
|
||||
memorizeWorkingDays(workingDays)
|
||||
}
|
||||
|
||||
fun memorizeWorkingDays(workingDays: List<Int>)
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.nill.after
|
||||
|
||||
class Restaurant(
|
||||
private val employees: MutableList<Employee> = mutableListOf()
|
||||
) {
|
||||
fun addEmployee(employee: Employee) {
|
||||
employees.add(employee)
|
||||
}
|
||||
|
||||
fun removeEmployee(employee: Employee) {
|
||||
employees.remove(employee)
|
||||
}
|
||||
|
||||
fun showAllEmployeesWorkingDays() {
|
||||
for (employee in employees) {
|
||||
println("${employee.name}의 근무일은 ${employee.workingDays}일 입니다.")
|
||||
}
|
||||
}
|
||||
|
||||
fun assignWorkingDays(workingDays: List<Int>, employeeName: String) {
|
||||
val employee = findEmployee(employeeName)
|
||||
employee.memorizeWorkingDays(workingDays)
|
||||
}
|
||||
|
||||
private fun findEmployee(employeeName: String): Employee {
|
||||
return employees.find { it.name == employeeName } ?: Employee.NOT_FOUND
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.nill.after
|
||||
|
||||
class RestaurantApplication
|
||||
|
||||
fun main() {
|
||||
val restaurant = Restaurant()
|
||||
restaurant.addEmployee(WorkingEmployee("banjjoknim"))
|
||||
|
||||
restaurant.assignWorkingDays(listOf(1, 4, 7, 14, 20, 27), "banjjoknim")
|
||||
restaurant.assignWorkingDays(listOf(2, 5, 10, 17, 23, 29), "colt")
|
||||
|
||||
restaurant.showAllEmployeesWorkingDays()
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.nill.after
|
||||
|
||||
class WorkingEmployee(
|
||||
override val name: String,
|
||||
override var workingDays: List<Int> = listOf()
|
||||
) : Employee {
|
||||
override fun memorizeWorkingDays(workingDays: List<Int>) {
|
||||
this.workingDays = workingDays
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.nill.before
|
||||
|
||||
class Employee(
|
||||
val name: String,
|
||||
var workingDays: List<Int> = listOf()
|
||||
) {
|
||||
fun memorizeWorkingDays(workingDays: List<Int>) {
|
||||
this.workingDays = workingDays
|
||||
}
|
||||
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (javaClass != other?.javaClass) return false
|
||||
|
||||
other as Employee
|
||||
|
||||
if (name != other.name) return false
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
return name.hashCode()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.nill.before
|
||||
|
||||
class Restaurant(
|
||||
private val employees: MutableList<Employee> = mutableListOf()
|
||||
) {
|
||||
fun addEmployee(employee: Employee) {
|
||||
employees.add(employee)
|
||||
}
|
||||
|
||||
fun removeEmployee(employee: Employee) {
|
||||
employees.remove(employee)
|
||||
}
|
||||
|
||||
fun showAllEmployeesWorkingDays() {
|
||||
for (employee in employees) {
|
||||
println("${employee.name}의 근무일은 ${employee.workingDays}일 입니다.")
|
||||
}
|
||||
}
|
||||
|
||||
fun assignWorkingDays(workingDays: List<Int>, employeeName: String) {
|
||||
val employee = findEmployee(employeeName)
|
||||
if (employee != null) {
|
||||
employee.memorizeWorkingDays(workingDays)
|
||||
}
|
||||
}
|
||||
|
||||
private fun findEmployee(employeeName: String): Employee? {
|
||||
return employees.find { it.name == employeeName }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.banjjoknim.soliddesignpatternsample.designpattern.nill.before
|
||||
|
||||
class RestaurantApplication
|
||||
|
||||
fun main() {
|
||||
val restaurant = Restaurant()
|
||||
restaurant.addEmployee(Employee("banjjoknim"))
|
||||
|
||||
restaurant.assignWorkingDays(listOf(1, 4, 7, 14, 20, 27), "banjjoknim")
|
||||
restaurant.assignWorkingDays(listOf(2, 5, 10, 17, 23, 29), "colt")
|
||||
|
||||
restaurant.showAllEmployeesWorkingDays()
|
||||
}
|
||||
Reference in New Issue
Block a user