feat : Design Pattern - 프록시(Proxy) 패턴 구현

This commit is contained in:
banjjoknim
2022-11-11 12:59:12 +09:00
parent 588b4c41b5
commit 27311dc1eb
10 changed files with 113 additions and 0 deletions

View File

@@ -95,6 +95,12 @@
### 프록시(Proxy) 패턴
#### 구현 요구사항
- 지갑의 주인은 지갑에 대해 입금 또는 출금을 진행할 수 있다.
- 지갑의 동작은 입금 및 출금만 가능하도록 제한된다.
- 지갑에 대해 입금 또는 출금이 이루어질 때 메시지를 출력한다.
### 어댑터(Adapter) 패턴
### 옵저버(Observer) 패턴

View File

@@ -0,0 +1,13 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.proxy.after
class ExtendsProxyWallet(balance: Int) : RealWallet(balance) {
override fun deposit(amount: Int) {
println("지갑에 $amount 원이 입금되었습니다.")
super.deposit(amount)
}
override fun withdrawal(amount: Int) {
println("지갑에서 $amount 원이 출금되었습니다.")
super.withdrawal(amount)
}
}

View File

@@ -0,0 +1,15 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.proxy.after
class ImplementsProxyWallet(
private val realWallet: RealWallet
) : Wallet {
override fun deposit(amount: Int) {
println("지갑에 $amount 원이 입금되었습니다.")
realWallet.deposit(amount)
}
override fun withdrawal(amount: Int) {
println("지갑에서 $amount 원이 출금되었습니다.")
realWallet.withdrawal(amount)
}
}

View File

@@ -0,0 +1,13 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.proxy.after
class Owner(
private val wallet: Wallet
) {
fun deposit(amount: Int) {
wallet.deposit(amount)
}
fun withdrawal(amount: Int) {
wallet.withdrawal(amount)
}
}

View File

@@ -0,0 +1,13 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.proxy.after
open class RealWallet(
private var balance: Int = 0
) : Wallet {
override fun deposit(amount: Int) {
this.balance += amount
}
override fun withdrawal(amount: Int) {
this.balance -= amount
}
}

View File

@@ -0,0 +1,7 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.proxy.after
interface Wallet {
fun deposit(amount: Int)
fun withdrawal(amount: Int)
}

View File

@@ -0,0 +1,9 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.proxy.after
class ProxyWalletApplication
fun main() {
val wallet = ImplementsProxyWallet(RealWallet())
val owner = Owner(wallet)
owner.deposit(1000)
}

View File

@@ -0,0 +1,13 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.proxy.before
class Owner(
private val wallet: Wallet
) {
fun deposit(amount: Int) {
wallet.deposit(amount)
}
fun withdrawal(amount: Int) {
wallet.withdrawal(amount)
}
}

View File

@@ -0,0 +1,15 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.proxy.before
class Wallet(
private var balance: Int = 0
) {
fun deposit(amount: Int) {
println("지갑에 $amount 원이 입금되었습니다.")
this.balance += amount
}
fun withdrawal(amount: Int) {
println("지갑에서 $amount 원이 출금되었습니다.")
this.balance -= amount
}
}

View File

@@ -0,0 +1,9 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.proxy.before
class WalletApplication
fun main() {
val wallet = Wallet()
val owner = Owner(wallet)
owner.deposit(1000)
}