-
[패턴] 퍼사드(Facade) 패턴카테고리 없음 2024. 4. 17. 09:43
Facade 패턴이란?
여러 서브 클래스들의 기능을 한 클래스에 모아 담당하도록 만든 패턴이다.
장점
서브 클래스 의존을 감소시켜주며 가독성이 상승하고
만약 필요한 경우 서브 클래스를 직접 참조할 수 있다.
사용법
(전에 작성했던 일부 코드를 가져왔다)
서브 클래스인 TownyRegistry와 EconomyService를 TownyService에서 참조하여 사용하도록 했다.
또한 buyTowny를 메서드로 만들었기 때문에 재사용성이 높아졌다.
@Service class TownyService( private val townyRegistry: TownyRegistry, private val economyService: EconomyService ) { fun buyTowny(player: Player): Boolean { if (townyRegistry.isTowny(player.location.chunk)) { player.sendMessage("이미 구매된 땅") return false } // 생략... economyService.withdraw(player, 50000) player.sendMessage("구매함") return true } }
@Bean class TownyRegistry { private val townyMap = mutableMapOf<UUID, Towny>() fun isTowny(chunk: Chunk): Boolean { return findTownyByChunk(chunk) != null } // 생략... }
@Service @PluginDepend(["Vault"]) class EconomyService( private val server: Server ) { private val economy by lazy { server.servicesManager.getRegistration(Economy::class.java)!!.provider } fun withdraw(player: OfflinePlayer, amount: Double) { economy.withdrawPlayer(player, amount) } // 생략... }