7가지 가장 중요한 소프트웨어 디자인 모델

소프트웨어 디자인 모델을 전면적으로 깊이 연구하려면 Software Design Patterns: Best Practices for Developers를 보십시오. 이것은 C.H. Afzal에 의해 만들어진 것입니다. 이 경험이 풍부한 소프트웨어 엔지니어는 넷플릭스, 마이크로소프트와 Oracle에서 다년간의 업무 경험을 가지고 있습니다.아래의 대부분 내용은 그의 수업에서 총결해 낸 것이다.

왜 디자인 모델을 선택했습니까?


최근 몇 년 동안 디자인 모델은 프로그래밍계에서 몇 가지 논쟁을 일으켰다. 주로'과도한 사용'으로 여겨져 코드를 이해하고 관리하기 어렵다.
중요한 것은 디자인 모델이 지금까지 한데 모여서는 안 되고 코드에 임의로'한 칼로 자르는'방식으로 응용되어야 한다는 것을 이해하는 것이다.소프트웨어 공학에서 진정한 문제 해결 능력은 대체할 수 없다.
그러나 사실은 정확한 상황에서 정확한 이유로 사용하면 디자인 모델이 매우 유용할 수 있다는 것이다.전략적으로 사용할 때, 그것들은 프로그래머로 하여금 효율을 크게 높일 수 있다. 왜냐하면 그들은 모두가 알고 있는 바퀴를 재발명하는 것을 피할 수 있기 때문에, 다른 사람들이 이미 개선한 방법을 사용하지 않기 때문이다.다른 사람과 토론하거나 더 큰 팀에서 코드를 관리할 때 반복적으로 발생하는 문제와 해결 방안을 개념화하는 데 유용한 공용어도 제공했다.
그럼에도 불구하고 개발자들도 모든 모델의 배후 방식과 원인을 이해할 수 있도록 하는 것이 중요한 경고다.
더 이상 논의할 필요가 없다(중요성의 일반적인 순서에 따라 가장 중요한 것에서 가장 중요하지 않은 것까지):

가장 중요한 디자인 모델


1) 싱글


singleton 모드는 클래스의 생성을 하나의 대상으로 제한하는 데 사용됩니다.전체 시스템의 조작을 조율하기 위해 하나의 대상이 필요할 때 이것은 유익하다.캐시, 스레드 탱크, 등록표를 포함한 클래스가 하나의 실례만 존재해야 한다는 몇 가지 예가 있다.
초기화 클래스의 대상은 매우 간단하다 — 그러나 우리는 어떻게 한 개의 대상만 만들 수 있습니까?답은 구조 함수로 하여금 우리가 단례로 정의할 클래스인'사유'로 정의하게 하는 것이다.이렇게 하면 클래스의 구성원만 개인 구조 함수에 접근할 수 있고 다른 사람은 접근할 수 없다.
중요 주의사항: 구조 함수를 사유가 아닌 보호함으로써 단일 사례에 대해 서브클래스화할 수 있다.어떤 경우에는 이것이 적절할 수도 있다.이 장면에서 사용하는 방법 중 하나는 하위 클래스의 단일 레지스터를 만드는 것입니다. getInstance 방법은 파라미터를 수신하거나 환경 변수를 사용하여 필요한 단일 레지스터를 되돌려줍니다.그리고 등록표는 문자열 이름을 단일 대상에 비추어 필요에 따라 접근할 수 있습니다.

2) 공장법


정상적인 공장에서 상품을 생산하기;소프트웨어 공장 생산 대상.이뿐만이 아니다 — 이렇게 하면 작성할 객체의 정확한 카테고리가 지정되지 않습니다.이를 실현하기 위해서는 구조 함수를 호출하지 않고 공장 방법을 호출해서 대상을 만든다.

일반적으로 Java의 객체 작성은 다음과 같이 수행됩니다.
SomeClass someClassObject = new SomeClass();
상술한 방법의 문제는 SomeClass 대상을 사용하는 코드가 갑자기 SomeClass의 구체적인 실현에 의존하게 되었다는 것이다.new를 사용하여 대상을 만드는 것은 틀림없지만, 코드와 구체적인 실현 클래스의 긴밀한 결합을 가져오는 부담이 있기 때문에 문제가 있을 수 있습니다.

3) 정책


이 정책 모델은 추상적으로 관련 알고리즘을 그룹으로 나누는 것을 허용하고 클라이언트를 수정하지 않은 상황에서 하나의 알고리즘이나 정책을 다른 알고리즘이나 정책으로 전환할 수 있다.코드는 단일 알고리즘을 직접 실현하는 것이 아니라 실행할 때 명령을 받고 실행할 알고리즘 그룹을 지정한다.

4) 관찰자


이런 모델은 대상 간의 일대다 의존 관계이기 때문에 한 대상이 상태를 바꿀 때 모든 의존 관계는 통지를 받는다.이것은 통상적으로 그들의 방법을 호출함으로써 실현된 것이다.
간단하게 보기 위해 트위터에서 누군가를 주목할 때 무슨 일이 일어날지 생각해 보세요.당신은 본질적으로 트위터에 관심 있는 사람(주제)의 트위터 업데이트를 요청하는 것이다.이 모델은 두 명의 참여자로 구성되어 있는데 하나는 갱신에 관심이 있는 관찰자이고 다른 하나는 갱신을 생성하는 주체이다.

하나의 주체는 많은 관찰자가 있을 수 있고 일대다의 관계이다.그러나 관찰자도 다른 주제의 업데이트를 자유롭게 구독할 수 있다.페이스북 페이지에서 뉴스 피드를 구독할 수 있습니다. 이것은 주제가 될 것입니다. 이 페이지에 새로운 게시물이 있을 때마다 구독자들은 새로운 게시물을 볼 수 있습니다.
주요 고려 사항: 피험자가 많고 관찰자가 적은 경우 각 피험자가 관찰자를 개별적으로 저장하면 스토리지 비용이 증가합니다. 일부 피험자는 동일한 관찰자를 여러 번 저장하기 때문입니다.

5) 건설업자


말 그대로 생성기 모드는 구축 대상에 사용된다.때때로 우리가 만든 대상은 여러 개의 하위 대상으로 구성되거나 복잡한 구조 과정이 필요할 수도 있다.생성기 모드를 사용하면 복잡한 유형을 만드는 작업을 간소화할 수 있습니다.복합 또는 집합 대상은 구축기가 일반적으로 구축하는 대상이다.
관건적인 고려 사항: 구축기 모델은'추상적인 공장'모델과 유사하게 보일 수 있지만 하나의 차이점은 구축기 모델이 점차적으로 대상을 만들고 추상적인 공장 모델이 한꺼번에 대상을 되돌려주는 것이다.

6) 어댑터


이것은 호환되지 않는 클래스가 하나의 클래스의 인터페이스를 다른 클래스로 바꾸어 협동적으로 작업을 할 수 있도록 허용한다.그것을 통역사로 상상하라. 공통어를 하지 않는 두 국가 원수가 만났을 때, 보통 한 명의 통역사가 두 사람 사이에 앉아 대화를 번역하여 교류를 실현한다.

만약 두 개의 응용 프로그램이 있는데, 그 중 하나는 XML이고, 다른 하나는 JSON 입력이 필요하다면, 이 두 응용 프로그램 사이에 어댑터를 설치해서 그것들이 빈틈없이 작동할 수 있도록 해야 한다.

7) 진술


상태 모드는 기계가 있을 수 있는 여러 가지 상태를 봉인하고 대상이 내부 상태가 변할 때 행동을 바꿀 수 있도록 허용한다.기계나 상하문(모드 세션에서 일컫는)은 그에 대해 행동을 취하여 서로 다른 상태로 추진할 수 있다.이 모드를 사용하지 않으면 코드가 원활하지 못하고if-else 조건이 가득합니다.

계속 공부하고 싶어요?


Software Design Patterns: Best Practices for Developers가 있으면 이론만 읽는 것이 아니라 할 수 있는 기회가 생길 것이다.당신은 실제 문제를 깊이 연구하고 실제 코드 예시를 통해 실제 해결 방안을 이해할 수 있을 것입니다.
이 과정은 4인방(Gang of Four)의 베스트셀러를 바탕으로 하지만 상호작용적이고 이해하기 쉬운 형식으로 펼쳐진다.당신은 상호작용 방식으로 책에서 23가지 유명한 디자인 모델을 파악하고 3가지 관건적인 디자인 모델(창의, 구조와 행위)의 정확한 응용을 배우며 이러한 디자인 모델을 자신의 프로젝트에 융합시키는 것을 배울 것입니다.

좋은 웹페이지 즐겨찾기