SWIFTでの「デザインモード」Adapterモード



ディレクトリに戻る

紹介する


アダプタモードは、異なるタイプのインタフェースを同じフォーマットで動作させる構造化設計モードです.

Example


家庭


仮定状況は前の記事戦略モデルと同じである.検索機能を開発し、戦略モデルで包括的、画像、ニュース、地図検索機能を実施しています.
final class SearchFeatureWithPattern {

    private var searchStrategy: SearchStrategy = SearchStrategyAll()

    func setSearchStrategy(to strategy: SearchStrategy) {
        searchStrategy = strategy
    }

    func searchButtonTapped() {
        searchStrategy.search()
    }
}

protocol SearchStrategy {
    func search()
}

struct SearchStrategyAll: SearchStrategy {
    func search() {
        print("전체 검색")
    }
}

struct SearchStrategyImage: SearchStrategy {
    func search() {
        print("이미지 검색")
    }
}

struct SearchStrategyNews: SearchStrategy {
    func search() {
        print("뉴스 검색")
    }
}

struct SearchStrategyMap: SearchStrategy {
    func search() {
        print("지도 검색")
    }
}
戦略モデルの文章でご覧のように、プロトコルに適合する新しいタイプを追加することで、新しい検索ポリシーを追加できます.ただし、他社が作成した検索機能(以下に示す)を使用する場合は、どうすればいいですか?
protocol FindAlgorithm {
    func find(global: Bool)
}

struct FindVideoAlgorithm: FindAlgorithm {
    func find(global: Bool) {
        print("\(global ? "전체 " : "일부 ")" + "동영상 찾기")
    }
}
他社が開発した機能SearchStrategyは、会社が使用するFindVideoAlgorithmプロトコルに従い、FindAlgorithmというパラメータにglobalタイプのパラメータを渡すことで検索を実行する.

アレイの適用

Bool既存のAdapter patternとは異なるインタフェースのタイプを調整して、同じインタフェースを使用できます.
まず、海外で使用されているコンセント仕様のアダプタなど、必要なインタフェースを提供するために、アダプタのタイプを定義します.
struct SearchFindAdapter: SearchStrategy {
    private var findAlgorithm: FindAlgorithm
    
    init(findAlgorithm: FindAlgorithm) {
        self.findAlgorithm = findAlgorithm
    }
    
    func search() {
        // 내가 `search()`라고 말하면 너는 `find(global: true)`로 알아들으면 돼.
        findAlgorithm.find(global: true)
    }
}
定義したアダプタタイプを使用すると、変換オブジェクトSearchStrategyTypeのインスタンスをベースにして、FindAlgorithmInterfaceとして使用できます.
アダプタを使用して変換したSearchStrategyは、次のように使用できます.
let searchFeatureWithPattern = SearchFeatureWithPattern()
let searchStrategyVideo = SearchFindAdapter(findAlgorithm: FindVideoAlgorithm())
searchFeatureWithPattern.setSearchStrategy(to: searchStrategyVideo)
searchFeatureWithPattern.searchButtonTapped()
ディレクトリに戻る

参考資料

  • Design Patterns in Swift - ochococo GitHub Repository
  • オブジェクト向け設計モード1-薄型符号化辞書