feat : Design Pattern - 어댑터(Adapter) 패턴 구현

This commit is contained in:
banjjoknim
2022-11-11 15:34:33 +09:00
parent 27311dc1eb
commit 826c70834d
10 changed files with 103 additions and 1 deletions

View File

@@ -98,11 +98,21 @@
#### 구현 요구사항
- 지갑의 주인은 지갑에 대해 입금 또는 출금을 진행할 수 있다.
- 지갑의 동작은 입금 및 출금만 가능하도록 제한된다.
- 지갑의 동작은 입금 및 출금만 가능하도록 제한된다.
- 지갑에 대해 입금 또는 출금이 이루어질 때 메시지를 출력한다.
### 어댑터(Adapter) 패턴
#### 구현 요구사항
- 발전소는 정해진 요청 규격에 따라 전기를 생산한다.
- 가정은 정해진 규격에 따라 전기를 얻는다.
- 발전소와 가정에서 사용하는 전기는 각각 다르다.
- 발전소에서 생산한 전기를 가정용으로 변환하는 계산식은 아래와 같다.
- 생산된 전류량 * (발전소 전압 / 가정용 전압)
- 발전소에서 생산한 전기의 전압은 11000V 이다.
- 가정에서 사용하는 전기의 전압은 220V 이다.
### 옵저버(Observer) 패턴
### 미디에이터(Mediator) 패턴

View File

@@ -0,0 +1,7 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.adapter.after
import com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common.HomeElectric
interface ElectricService {
fun generateElectric(current: Int): HomeElectric
}

View File

@@ -0,0 +1,15 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.adapter.after
import com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common.HomeElectric
import com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common.PowerStation
import com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common.PowerStationElectricRequest
class HomePowerStationElectricAdapter(
private val powerStation: PowerStation
): ElectricService {
override fun generateElectric(current: Int): HomeElectric {
val powerStationElectricRequest = PowerStationElectricRequest(current)
val powerStationElectric = powerStation.generateElectric(powerStationElectricRequest)
return powerStationElectric.toHomeElectric()
}
}

View File

@@ -0,0 +1,16 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.adapter.after
import com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common.Home
import com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common.PowerStation
class PowerStationApplication
fun main() {
val powerStation = PowerStation()
val homePowerStationElectricAdapter = HomePowerStationElectricAdapter(powerStation)
val homeElectric = homePowerStationElectricAdapter.generateElectric(1000)
val home = Home()
home.takeElectric(homeElectric) // 가정은 발전소의 전기를 사용하는 클라이언트 역할을 한다.
}

View File

@@ -0,0 +1,19 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.adapter.before
import com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common.Home
import com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common.PowerStation
import com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common.PowerStationElectricRequest
class PowerStationApplication
fun main() {
val powerStation = PowerStation()
val electricRequest = PowerStationElectricRequest(1000)
val powerStationElectric = powerStation.generateElectric(electricRequest)
val homeElectric = powerStationElectric.toHomeElectric()
val home = Home()
home.takeElectric(homeElectric) // 가정은 발전소의 전기를 사용하는 클라이언트 역할을 한다.
}

View File

@@ -0,0 +1,9 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common
class Home(
private var electric: HomeElectric = HomeElectric(0)
) {
fun takeElectric(electric: HomeElectric) {
this.electric = electric
}
}

View File

@@ -0,0 +1,5 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common
data class HomeElectric(
val current: Int,
)

View File

@@ -0,0 +1,7 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common
class PowerStation {
fun generateElectric(request: PowerStationElectricRequest): PowerStationElectric {
return PowerStationElectric(request.current)
}
}

View File

@@ -0,0 +1,9 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common
data class PowerStationElectric(
val current: Int,
) {
fun toHomeElectric(): HomeElectric {
return HomeElectric(this.current * (11000 / 220))
}
}

View File

@@ -0,0 +1,5 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.adapter.common
data class PowerStationElectricRequest(
val current: Int
)