Python 디자인 모델 의 조합 모델 원리 와 용법 사례 분석
조합 모드(Composite Pattern):대상 을 트 리 구조 로 조합 하여'부분-전체'의 차원 구 조 를 나타 내 고 조합 모드 는 사용자 가 하나의 대상 과 조합 대상 에 대한 사용 을 일치 하 게 한다.
다음은 그룹 모드 의 demo 입 니 다.
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
――
(Composite Pattern): “ - ” , .
"""
#
class Component(object):
def __init__(self, name):
self.name = name
def add(self,comp):
pass
def remove(self,comp):
pass
def display(self, depth):
pass
#
class Leaf(Component):
def add(self,comp):
print ' '
def remove(self,comp):
print ' '
def display(self, depth):
strtemp = ''
for i in range(depth):
strtemp += strtemp+'-'
print strtemp+self.name
#
class Composite(Component):
def __init__(self, name):
self.name = name
self.children = []
def add(self,comp):
self.children.append(comp)
def remove(self,comp):
self.children.remove(comp)
def display(self, depth):
strtemp = ''
for i in range(depth):
strtemp += strtemp+'-'
print strtemp+self.name
for comp in self.children:
comp.display(depth+2)
if __name__ == "__main__":
#
root = Composite("root")
# 2
root.add(Leaf('leaf A'))
root.add(Leaf('leaf B'))
# Composite X
comp = Composite("Composite X")
comp.add(Leaf('leaf XA'))
comp.add(Leaf('leaf XB'))
root.add(comp)
# Composite X
comp2 = Composite("Composite XY")
#Composite X 2
comp2.add(Leaf('leaf XYA'))
comp2.add(Leaf('leaf XYB'))
root.add(comp2)
# 2 ,C D,D ,
root.add(Leaf('Leaf C'))
leaf = Leaf("Leaf D")
root.add(leaf)
root.remove(leaf)
#
root.display(1)
실행 결 과 는 다음 과 같 습 니 다.상류의 디자인 은 다음 과 같다.
응용 필드:
부분 과 전체 차원 의 구 조 를 구현 해 야 할 때
사용자 가 조합 대상 과 단일 대상 의 차 이 를 무시 하고 조합 구조의 모든 대상 을 통일 적 으로 사용 할 때
더 많은 파 이 썬 관련 내용 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.
본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.