ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Delegation Pattern 위임 패턴
    Design Pattern 2021. 9. 3. 13:55

    위임이란 행동(권한이나 일처리 등)을 다른 객체에게 맡기는 것

     

    위탁자: 객체1 ->(위임)-> 수탁자: 객체2

    객체1의 모든 행동을 객체2가 대신할 수 있도록 위임


    나의 일처리를 친구에게 위임

    친구가 나의 일처리를 대신함

    package com.test.kotlinpractice.delegation
    
    interface WorkList{ //작업 리스트
        fun water()
        fun repair()
        fun buyParts()
    }
    
    class Me():WorkList{ //나의 작업 리스트
        override fun water(){
            println("Me의 화분에 물을 주는중")
        }
        override fun repair(){
            println("Me의 의자를 고치는중")
        }
        override fun buyParts() {
            println("Me의 카드로 부품을 구매")
        }
    
    }
    
    class Friend(var me:Me){ //나의 작업을 친구에게 위임
        fun water(){
            me.water()
        }
        fun repair(){
            me.repair()
        }
        fun buyParts(){
            me.buyParts()
        }
    }
    
    fun main(){
        var me:Me=Me()
    
        //나의 행동,권한(함수)들을 친구에게 위임
        var friend1:Friend=Friend(me)
        var friend2:Friend= Friend(me)
        var friend3:Friend= Friend(me)
        
        friend1.water() //me 대신 친구1이 물을 줌
        friend2.repair() //me 대신 친구2가 의자를 수리함
        
        friend3.buyParts() //me 대신 친구3가 me의 카드로 부품 구매
    }

    나의 권한을 친구가 할 수 있도록 위임

    출처https://kotlinworld.com/85

    package com.test.kotlinpractice.delegation
    
    interface Contract{
        fun makeContract()
    }
    
    class Me():Contract{
        override fun makeContract() {
            println("부동산 계약하기")
        }
    }
    
    class Friend(var me:Me){ 
        fun makeContract(){
            me.makeContract()
        }
    }
    
    fun main(){
        var me:Me=Me()
    
        //나의 권한(함수)을 친구에게 위임
        var friend1:Friend=Friend(me)
        
        //친구가 나 대신 계약을 진행
        friend1.makeContract()
    }

     


    위임은 has a 관계

     

    상속을 대체할 수 있다.

    상속에 해당하는 is a 관계가 하나라도 만족하지 않을 경우 상속으로 적절하지 않아 위임을 사용해야한다.

     

     

     

    댓글

Designed by Tistory.