Python의 디자인 패턴과 관용어 모음입니다.
각 패턴에는 고유한 장단점이 있다는 점을 기억하세요. 그리고 특정 패턴을 구현하는 방법보다 특정 패턴을 선택하는 이유에 더 주의를 기울여야 합니다.
창조 패턴 :
무늬 | 설명 |
---|---|
abstract_factory | 특정 팩토리에 일반 함수 사용 |
보그 | 인스턴스 간에 공유 상태를 갖는 싱글톤 |
건축업자 | 여러 생성자를 사용하는 대신 빌더 객체가 매개변수를 받고 생성된 객체를 반환합니다. |
공장 | 인스턴스를 생성하기 위해 특수한 함수/메소드를 위임합니다. |
게으른 평가 | Python의 지연 평가 속성 패턴 |
수영장 | 동일한 유형의 인스턴스 그룹을 사전 인스턴스화하고 유지합니다. |
원기 | 새 인스턴스에 대해 프로토타입의 팩토리 및 복제본을 사용합니다(인스턴스화가 비용이 많이 드는 경우). |
구조적 패턴 :
무늬 | 설명 |
---|---|
3층 | 데이터<->비즈니스 로직<->표현 분리(엄격한 관계) |
어댑터 | 화이트리스트를 사용하여 한 인터페이스를 다른 인터페이스에 적용 |
다리 | 인터페이스 변경을 완화하는 클라이언트-공급자 중개자 |
합성물 | 클라이언트가 개별 객체와 구성을 균일하게 처리할 수 있도록 합니다. |
장식가 | 출력에 영향을 미치기 위해 기능을 다른 기능으로 래핑합니다. |
정면 | 하나의 클래스를 다른 여러 클래스에 대한 API로 사용 |
플라이급 | 유사/동일한 상태를 가진 객체의 기존 인스턴스를 투명하게 재사용 |
front_controller | 애플리케이션에 들어오는 단일 핸들러 요청 |
mvc | 모델<->뷰<->컨트롤러(엄격하지 않은 관계) |
대리 | 객체는 작업을 다른 것으로 퍼널합니다. |
행동 패턴 :
무늬 | 설명 |
---|---|
책임 사슬 | 데이터 처리를 시도하고 처리하기 위해 연속적인 처리기 체인을 적용합니다. |
목록 | 일반 메소드는 구성 매개변수를 기반으로 다양한 특수 메소드를 호출합니다. |
chaining_method | 계속 콜백 다음 객체 메소드 |
명령 | 나중에 호출할 수 있도록 명령과 인수를 묶습니다. |
반복자 | 컨테이너를 순회하고 컨테이너의 요소에 액세스 |
반복자(alt. impl.) | 컨테이너를 순회하고 컨테이너의 요소에 액세스 |
중재인 | 다른 개체를 연결하고 프록시 역할을 하는 방법을 아는 개체 |
기념물 | 이전 상태로 돌아가는 데 사용할 수 있는 불투명 토큰 생성 |
관찰자 | 이벤트/데이터 변경 알림을 위한 콜백 제공 |
게시_구독 | 소스는 0개 이상의 등록된 리스너에게 이벤트/데이터를 신디케이트합니다. |
기재 | 특정 클래스의 모든 하위 클래스를 추적합니다. |
사양 | 부울 논리를 사용하여 비즈니스 규칙을 함께 연결하여 비즈니스 규칙을 재결합할 수 있습니다. |
상태 | 논리는 개별적인 수의 잠재적 상태와 전환될 수 있는 다음 상태로 구성됩니다. |
전략 | 동일한 데이터에 대해 선택 가능한 작업 |
주형 | 객체는 구조를 부과하지만 플러그형 구성 요소를 사용합니다. |
방문객 | 컬렉션의 모든 항목에 대해 콜백을 호출합니다. |
테스트 가능성 패턴을 위한 설계 :
무늬 | 설명 |
---|---|
의존성_주입 | 의존성 주입의 3가지 변형 |
기본 패턴 :
무늬 | 설명 |
---|---|
위임_패턴 | 객체는 두 번째 객체(대리자)에게 위임하여 요청을 처리합니다. |
기타 :
무늬 | 설명 |
---|---|
칠판 | 아키텍처 모델, 솔루션 구축을 위한 다양한 하위 시스템 지식 수집, AI 접근 방식 - 4개 패턴이 아닌 집단 |
그래프_검색 | 그래프 알고리즘 - 4개 패턴이 아닌 갱 |
ㅎ | 계층적 상태 머신 - 4개 패턴이 아닌 그룹 |
Peter Ullrich의 Python 디자인 패턴
Sebastian Buczyński - Python에서 디자인 패턴이 필요하지 않은 이유는 무엇입니까?
그런 건 필요 없어!
디자인 패턴을 통한 플러그형 라이브러리
구현이 추가되거나 수정되면 다음 지침을 검토하십시오.
해당 참조 또는 기타 유용한 정보에 대한 링크가 포함된 독스트링 형식으로 모듈 수준 설명을 추가합니다.
알고 있는 경우 "Python 생태계의 예" 섹션을 추가하세요. 패턴이 실제 문제에 어떻게 적용될 수 있는지 보여줍니다.
Facade.py에는 자세한 설명의 좋은 예가 있지만 때로는 template.py와 같이 더 짧은 설명으로도 충분할 수 있습니다.
일부 패턴의 Python 2 호환 버전을 보려면 레거시 태그를 확인하세요.
다른 모든 작업이 완료되면 README의 해당 부분을 업데이트하세요.
패치를 제출하기 전에 다음을 실행하십시오.
black .
그러면 코드가 린트됩니다.그런 다음 다음 중 하나를 수행하십시오.
tox
또는 tox -e ci37
이는 단위 테스트를 실행합니다. 자세한 내용은 tox.ini를 참조하세요../lint.sh
사용하십시오. 이 스크립트는 코드를 린트하고 테스트합니다. 이 스크립트는 CI 파이프라인 작업을 미러링합니다. flake8
또는 pytest
명령을 수동으로 실행할 수도 있습니다. 예는 tox.ini
에서 찾을 수 있습니다.
버그 보고서 재생산이나 버전 번호나 재생산 지침과 같은 중요한 정보 요청을 포함할 수 있는 문제 및 풀 요청을 분류할 수 있습니다. 문제 분류를 시작하려는 경우 시작하는 쉬운 방법 중 하나는 CodeTriage에서 python-patterns를 구독하는 것입니다.
Mutable.ai의 사람들은 코드베이스를 인식하는 AI 도우미를 구축했습니다. 한번 시도해 보세요