Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.example.algorithmstudy.pattern.structure.facade

/**
* 최소 지식의 원칙!
*
* - 자기 자신만의 객체 사용
* - 메서드에 전달된 매게변수 사용
* - 메서드에서 생성된 객체 사용
* - 객체에 속하는 메서드 사용
*/
class Car {

// 메서드에서 생성된 객체 사용
private lateinit var engine: Engine

constructor(engine: Engine) {
this.engine = engine
}

fun start(key: Key) {

// 메서드에서 생성된 객체의 사용
val doors = Doors()

// 매개변수로 전달된 객체의 메서드 사용
val authorized = key.turns()

if (authorized) {

// 객채에 속하는 메서드 사용
engine.start()

// 객체 내에 있는 메서드의 사용
updateDashboardDisplay()

// 객체에 속하는 메서드 사용
doors.lock()
}
}

fun updateDashboardDisplay() {

}

inner class Engine {
fun start() {}
}

inner class Doors {
fun lock() {}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.example.algorithmstudy.pattern.structure.facade

import com.example.algorithmstudy.pattern.creation.factory.Car

/**
* 퍼사드 패턴을 차용한 자동차 공장 클래스
*
* - 퍼사드 패턴을 보여주기만을 위함이므로, 실제 사용 예로 따지기에는 좋지 않을 수 있음
* - 예 : 현재 구조는 특정 자동차와 기업들에 대한 변수 값이 고정되어 있으므로 유연하게 사용할 수 가 없음
*/
class FacadeCarFactory {
lateinit var hyundai: Car
lateinit var kia: Car

fun createCar() {
hyundai = Car.Builder("hyundai")
.setEngine("256hp")
.setSunroof(false)
.setWheels(4)
.create()

kia = Car.Builder("kia")
.setEngine("300hp")
.setSunroof(true)
.setWheels(4)
.create()
}

fun printCompany() {
println(hyundai.getCompany())
println(kia.getCompany())
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.example.algorithmstudy.pattern.structure.facade

class Key {

fun turns(): Boolean {
return true
}
}