Proxy

デザインパターンとは

デザインパターンとはオブジェクト思考開発における先人たちが作り上げてきた便利な設計図です。

Gang of Four通称Gofが1994年に出版した『オブジェクト指向における再利用のためのデザインパターン』の中で23個の設計図が紹介されています。

Note

デザインパターンのサンプルコードはSwift4でまとめます。

プロキシーパターンとは?

proxyパターンは代理人を作成し、本人の負担を軽減するパターンです。

代理人オブジェクトが処理できない時だけ本人オブジェクトで処理を行います。

サンプルコード

サンプルコードでは、SES(System Engineering Service)を例にプログラムを作成しました。

登場人物は2人で元請け下請けです。下請けができる仕事は下請けにやらせ、下請けができない仕事を元請けが担当します。

Protocol

protocol Programmer {
    func programming()
    func excelWork()
    func deppQuestion()
}

元請けと下請けクラス

このコードではプログラミングとエクセルでの資料作成は下請けが行うことができますが。深い質問については答えることができないため元請けに聞いています。

class Master: Programmer {
    func programming() {
        print("元請け:プログラミングする")
    }
    
    func excelWork() {
        print("元請け:excel資料を作る")
    }
    
    func deppQuestion() {
        print("元請け:それは○○ですよ!!")
    }
}
class Slave: Programmer {
    private var master:Programmer = Master()
    func programming() {
        print("下請け:プログラミングする")
    }
    
    func excelWork() {
        print("下請け:excel資料を作る")
    }
    
    func deppQuestion() {
        master.deppQuestion()
    }
}

呼び出し元

let slave = Slave()
slave.programming()
slave.excelWork()
slave.deppQuestion()

コンソール

下請けがいることで元請けの負担が減っているいます。

下請け:プログラミングする
下請け:excel資料を作る
元請け:それは○○ですよ!!

コード一覧

import UIKit

protocol Programmer {
    func programming()
    func excelWork()
    func deppQuestion()
}

class Master: Programmer {
    func programming() {
        print("元請け:プログラミングする")
    }
    
    func excelWork() {
        print("元請け:excel資料を作る")
    }
    
    func deppQuestion() {
        print("元請け:それは○○ですよ!!")
    }
}
class Slave: Programmer {
    private var master:Programmer = Master()
    func programming() {
        print("下請け:プログラミングする")
    }
    
    func excelWork() {
        print("下請け:excel資料を作る")
    }
    
    func deppQuestion() {
        master.deppQuestion()
    }
}

let slave = Slave()
slave.programming()
slave.excelWork()
slave.deppQuestion()

参考文献

Proxyパターン

SwiftでProxyパターンを使ったデータ更新ロジック

IT 専科Proxy パターン

デザインパターン

次の記事

Composite