ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [패턴] 퍼사드(Facade) 패턴
    카테고리 없음 2024. 4. 17. 09:43

    Facade 패턴이란?

    여러 서브 클래스들의 기능을 한 클래스에 모아 담당하도록 만든 패턴이다.


    장점

    서브 클래스 의존을 감소시켜주며 가독성이 상승하고

    만약 필요한 경우 서브 클래스를 직접 참조할 수 있다.


    사용법

    (전에 작성했던 일부 코드를 가져왔다)

    서브 클래스인 TownyRegistryEconomyServiceTownyService에서 참조하여 사용하도록 했다.

    또한 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)
        }
        // 생략...
    }
Designed by Tistory.