어댑터 패턴 🔌
7572 단어 gowebdev100daysofcodetutorial
가장 먼저 생각나는 것은 아마도 인도 전화 충전기를 유럽 벽면 소켓에 맞출 수 있는 벽면 소켓용 어댑터일 것입니다! 😂 바로 어댑터입니다. 최종 결과가 균일한 API를 노출하도록 비균일 클래스 주위에 작성된 래퍼 클래스입니다.
이해하기 어려운 경우 다음 예가 도움이 될 것입니다.
This tutorial uses go. You can find the implementation here. However, if you read through it, I'm confident that you will be able to implement it in any programming language 🤗
번역기 예
귀하가 스페인으로 이주한지 얼마 되지 않은 일반 영어를 구사하는 사람이라고 생각해 보십시오. 🇪🇸
당신의 이웃은 보기 좋은 사람이고 당신은 이 사람과 친구가 되고 싶습니다. 그러나 한 가지 문제가 있습니다. 😨
이웃의 모든 사람들은 독점적으로 스페인어를 구사합니다. 아 역시 스페인어를 못하시네요 😞
잠재적인 친구와 의사 소통을 하려면 영어에서 스페인어로 연설을 변환하는 데 도움이 되는 일종의 번역기가 필요합니다. 프로그래밍 용어로 이 변환기는 우리가 어댑터라고 부르는 것입니다!
이것이 코드에서 어떻게 보이는지 이해합시다.
첫 번째 단계로, 일반 스페인어 사용자가 스페인어와 영어 사용자 모두에 대한 구조체와 함께 구현할 인터페이스를 만들어 보겠습니다.
type SpeakSpanish interface {
greetInSpanish() string
}
// Notice that the SpanishSpeaker already implements the
// SpeakSpanish interface
type SpanishSpeaker struct {}
func (s *SpanishSpeaker) greetInSpanish() string {
return "¡Hola!"
}
type EnglishSpeaker struct {}
func (e *EnglishSpeaker) greetInEnglish() string {
return "Hello there!"
}
보시다시피
SpanishSpeaker
는 이미 SpeakSpanish
인터페이스를 구현하고 있습니다. 그러나 EnglishSpeaker
에는 greetInSpanish
기능이 없으므로 SpeakSpanish
인터페이스를 구현하지 않습니다.어댑터 패턴을 사용하여 스페인어로 인사하는 기능을 제공하는 래퍼
EnglishSpeaker
를 작성해 보겠습니다.type EnglishToSpanishAdapter {
speaker EnglishSpeaker
}
func (a *EnglishToSpanishAdapter) greetInSpanish() string {
const englishMessage = a.speaker.greetInEnglish();
return translate(englishMessage)
}
func translate(engMessage string) spanishMessage string {
// *insert complex translation logic*
spanishMessage = "¡Hola!"
return
}
어댑터를 자세히 관찰하면 구조체이고
greetInSpanish
메서드가 있으므로 SpeakSpanish
인터페이스를 구현한다는 것을 알 수 있습니다. 이 어댑터에 영어 스피커를 포장하면 기본적으로 스페인어 스피커를 얻을 수 있기 때문에 좋습니다.또한 어댑터와 함께 util로 번역 기능이 있습니다. 일반적으로 Google 번역과 같은 일부 서비스를 사용하여 메시지를 번역합니다.
이제 어댑터 모듈이 완성되었습니다. 놀라운! 🔥🤘🏽
테스트해보고 동작을 봅시다.
func main() {
espanol := SpanishSpeaker{}
englishwoman := EnglishSpeaker{}
fmt.Println("Without translation:")
fmt.Println("Español says: ", espanol.greetInSpanish())
fmt.Println("English Woman says: ", englishwoman.greetInEnglish())
adaptedEnglishwoman := EnglishToSpanishAdapter{
speaker: englishwoman,
}
fmt.Println("------------")
fmt.Println("With translation:")
fmt.Println("Español says: ", espanol.greetInSpanish())
fmt.Println("English Woman says: ", adaptedEnglishwoman.greetInSpanish())
}
결과적으로 터미널에 다음과 같은 내용이 표시되어야 합니다.
Without translation:
Español says: ¡Hola!
English Woman says: Hello there
------------
With translation:
Español says: ¡Hola!
English Woman says: ¡Hola!
만세! 번역이 작동했습니다. 영국 여자와 스페인 친구가 이제 친구가 될 수 있습니다! 👩🏻🤝👨🏾
디자인 패턴으로 하루를 절약하세요 🚀😁
이 튜토리얼의 모든 코드는 this github repo에서 찾을 수 있습니다.
건배 ☕️
Reference
이 문제에 관하여(어댑터 패턴 🔌), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/shubhamzanwar/adapter-pattern-4knn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)