Design Patterns Talk - Proxy Pattern

1738 단어
《대화디자인모델》 제7장 - 대리모델의 Swift 실현.

문제.


'추구자'는'대리'를 통해'스쿨걸'에게 선물을 준다.

시나리오


이 대상에 대한 접근을 제어하기 위해 다른 대상에게 에이전트를 제공합니다.

1. Subject: RealSubject와 Proxy의 공통 인터페이스 정의

protocol SendGift {
    func sendDolls()
    func sendFlowers()
    func sendChocolate()
}

2. RealSubject 클래스: Proxy가 나타내는 실제 솔리드 정의


인터페이스가 정의한 방법을 실현하다.
class Pursuit: SendGift{
    
    let mm: SchoolGirl
    
    init(mm: SchoolGirl) {
        self.mm = mm
    }
    
    func sendDolls() {
        print("Send dolls to \(mm.name)")
    }
    
    func sendFlowers() {
        print("Send flowers to \(mm.name)")
    }
    
    func sendChocolate() {
        print("Send chocolate to \(mm.name)")
    }
}

3. Proxy 클래스: 프록시가 엔티티에 액세스할 수 있도록 참조를 저장하고 Subject 정의 인터페이스를 구현하면 프록시가 엔티티를 대체할 수 있습니다.


실행 중pursuit 클래스와 관련된 방법을 호출합니다
class Proxy: SendGift{
    var persuit: Pursuit
    
    init(mm: SchoolGirl) {
        self.persuit = Pursuit(mm:mm)
    }
    
    func sendDolls() {
        persuit.sendDolls()
    }
    
    func sendFlowers() {
        persuit.sendFlowers()
    }
    
    func sendChocolate() {
        persuit.sendChocolate()
    }
}

테스트

let jane = SchoolGirl(name: "Jane")
let proxy = Proxy(mm: jane)

proxy.sendDolls()
proxy.sendFlowers()
proxy.sendChocolate()

장면 적용


4
  • 원격 에이전트는 한 대상이 서로 다른 주소 공간에 국부 에이전트를 제공하여 한 대상이 서로 다른 주소 공간에 존재한다는 사실을 숨길 수 있다
  • 4
  • 가상 에이전트는 이를 통해 실례화하는 데 오랜 시간이 걸리는 실제 대상을 저장한다
  • 4
  • 안전 에이전트, 실제 대상이 방문할 때의 권한을 제어합니다
  • 4
  • 스마트 가이드, 실제 대상을 호출할 때 다른 일을 대리 처리한다
  • playground

    좋은 웹페이지 즐겨찾기