SWIFTでの「デザインモード」Adapterモード
10783 ワード
ディレクトリに戻る
紹介する
アダプタモードは、異なるタイプのインタフェースを同じフォーマットで動作させる構造化設計モードです.
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)
}
}
定義したアダプタタイプを使用すると、変換オブジェクトSearchStrategy
Typeのインスタンスをベースにして、FindAlgorithm
Interfaceとして使用できます.
アダプタを使用して変換したSearchStrategy
は、次のように使用できます.let searchFeatureWithPattern = SearchFeatureWithPattern()
let searchStrategyVideo = SearchFindAdapter(findAlgorithm: FindVideoAlgorithm())
searchFeatureWithPattern.setSearchStrategy(to: searchStrategyVideo)
searchFeatureWithPattern.searchButtonTapped()
ディレクトリに戻る
参考資料
家庭
仮定状況は前の記事戦略モデルと同じである.検索機能を開発し、戦略モデルで包括的、画像、ニュース、地図検索機能を実施しています.
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)
}
}
定義したアダプタタイプを使用すると、変換オブジェクトSearchStrategy
Typeのインスタンスをベースにして、FindAlgorithm
Interfaceとして使用できます.アダプタを使用して変換した
SearchStrategy
は、次のように使用できます.let searchFeatureWithPattern = SearchFeatureWithPattern()
let searchStrategyVideo = SearchFindAdapter(findAlgorithm: FindVideoAlgorithm())
searchFeatureWithPattern.setSearchStrategy(to: searchStrategyVideo)
searchFeatureWithPattern.searchButtonTapped()
ディレクトリに戻る 参考資料
Reference
この問題について(SWIFTでの「デザインモード」Adapterモード), 我々は、より多くの情報をここで見つけました https://velog.io/@ryan-son/디자인-패턴-Adapter-pattern-in-Swiftテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol