feat : Design Pattern - 파사드(Facade) 패턴 구현

This commit is contained in:
banjjoknim
2022-11-12 18:10:32 +09:00
parent 4b2d8a9669
commit 21937f8dc8
12 changed files with 123 additions and 0 deletions

View File

@@ -126,6 +126,13 @@
### 파사드(Facade) 패턴
#### 구현 요구사항
- 회원의 모든 정보를 조회한다.
- 회원의 모든 정보에는 회원의 기본 정보와 친구들에 대한 정보가 있다.
- 회원의 기본 정보에는 이름, 나이가 있다.
- 회원의 친구 정보에는 친구의 이름, 나이가 있다.
### 추상 팩토리(Abstract Factory) 패턴
### 컴포지트(Composite) 패턴

View File

@@ -0,0 +1,7 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.facade.after
import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.Information
interface InformationFinder {
fun findInformation(): Information
}

View File

@@ -0,0 +1,16 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.facade.after
import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.FriendFinder
import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.MemberFinder
class MemberApplication
fun main() {
val memberFinder = MemberFinder()
val friendFinder = FriendFinder()
val memberInformationFinder = MemberInformationFinder(memberFinder, friendFinder)
val memberInformation = memberInformationFinder.findInformation()
println(memberInformation)
}

View File

@@ -0,0 +1,17 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.facade.after
import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.FriendFinder
import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.Information
import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.MemberFinder
import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.MemberInformation
class MemberInformationFinder(
private val memberFinder: MemberFinder,
private val friendFinder: FriendFinder,
): InformationFinder {
override fun findInformation(): Information {
val member = memberFinder.findMember()
val friends = friendFinder.findFriends(member)
return MemberInformation(member, friends)
}
}

View File

@@ -0,0 +1,18 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.facade.before
import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.FriendFinder
import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.MemberFinder
import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.MemberInformation
class MemberApplication
fun main() {
val memberFinder = MemberFinder()
val friendFinder = FriendFinder()
val member = memberFinder.findMember()
val friends = friendFinder.findFriends(member)
val memberInformation = MemberInformation(member, friends)
println(memberInformation)
}

View File

@@ -0,0 +1,6 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.facade.common
data class Friend(
val name: String,
val age: Int
)

View File

@@ -0,0 +1,10 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.facade.common
import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.Friend
import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.Member
class FriendFinder {
fun findFriends(member: Member): List<Friend> {
return listOf(Friend("colt", 29))
}
}

View File

@@ -0,0 +1,11 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.facade.common
data class FriendInformation(
val name: String,
val age: Int
) : Information {
constructor(friend: Friend) : this(
name = friend.name,
age = friend.age
)
}

View File

@@ -0,0 +1,3 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.facade.common
interface Information

View File

@@ -0,0 +1,6 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.facade.common
class Member(
val name: String,
val age: Int
)

View File

@@ -0,0 +1,9 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.facade.common
import com.banjjoknim.soliddesignpatternsample.designpattern.facade.common.Member
class MemberFinder {
fun findMember(): Member {
return Member("banjjoknim", 29)
}
}

View File

@@ -0,0 +1,13 @@
package com.banjjoknim.soliddesignpatternsample.designpattern.facade.common
data class MemberInformation(
val memberName: String,
val memberAge: Int,
val friendsInformation: List<FriendInformation>
): Information {
constructor(member: Member, friends: List<Friend>) : this(
memberName = member.name,
memberAge = member.age,
friendsInformation = friends.map { FriendInformation(it) }
)
}