組み合わせモードでは、カテゴリを全体に分類し、ツリー構造を使用してすべての全体を記述することにより、複数の全体間の関係を整理します。
一般的な記述方法は、カテゴリオブジェクトの下にオブジェクトの複数の要素を追加することであり、オブジェクトは他のオブジェクトの下の要素です。簡単に言うと、学校には本部があり、その下に教師部門と入学部門があります。本部には支部学校と支部学校があります。
私の意見では、デザインパターンの使用は、本に記載されている特定の問題の解決に限定されません。柔軟に適用するには、豊富なビジネス経験が必要です。私の能力は限られています。これも簡単な例です。追加の柔軟な操作は、個人の書き込み方法に依存することを説明します。
まず、学校の基本クラスを作成します。
#根
class root:
name = ''
def __init__(self, name):
self.name = name
def add(self, root):
pass
上記の学校の基本クラスの初期化メソッドは名前を受け取ることであり、抽象メソッドaddがあります。
学校の基本クラスを作成したら、新しい学校のクラスを作成し、ルートの基本クラスを継承します。
#学校类
class School(root):
childrenroot = []
def add(self, root):
self.childrenroot.append(root)
上記のスクールクラスでは、ルート基本クラスが継承され、ルート値を受け取ってchildrenrootリストに追加するためのaddメソッドが実装されているため、現在のオブジェクトの下に子ノードを追加したり、従属オブジェクトを追加したりできます。
新しい入学事務局クラスと教師部門クラスを作成します。
#招生办
class StudentAdmissionDept(root):
def __init__(self, name):
self.name = name
#师资部
class FacultyDepartment(root):
def __init__(self, name):
self.name = name
上記の内容は非常に単純で、すべてルートから継承され、初期化メソッドにすぎません。
呼び出しの実装を開始します。まず、新しい学校本部オブジェクトを作成し、この本部オブジェクトの下に入学事務局オブジェクトと教師部門オブジェクトを追加します。
root = School('总部')
root.add(StudentAdmissionDept('总部招生办'))
root.add(FacultyDepartment('总部师资部'))
新しい本社オブジェクトを作成したら、ブランチキャンパスオブジェクトを追加します。ブランチキャンパスの部門設定は、メインキャンパスの設定と同じです。
s1 = School('桂林校区')
s1.add(StudentAdmissionDept('桂林校区 招生办'))
s1.add(FacultyDepartment('桂林校区 师资部'))
root.add(s1)
最初のギリンキャンパスを構成した後、ルート本部のaddメソッドを使用して、現在のギリンキャンパスを部下として追加します。
さらにいくつかのキャンパスを作成します。
s2 = School('深圳校区')
s2.add(StudentAdmissionDept('深圳校区 招生办'))
s2.add(FacultyDepartment('深圳校区 师资部'))
root.add(s2)
s3 = School('广州校区')
s3.add(StudentAdmissionDept('广州校区 招生办'))
s3.add(FacultyDepartment('广州校区 师资部'))
root.add(s3)
上記の構成方法は、ルート本部キャンパスの下位として構成された最初のキャンパスの構成方法と同じです。
最後に、トラバーサルを使用して、各キャンパスの名前を印刷します。
print('\n',root.name,'下级学校层级:\n')
for i in root.childrenroot:
print(i.name)
結果は次のとおりです。
タイプセットがないため、上記の結果は適切な視覚的表示レベルではなく、残りは自分でタイプセットして出力するだけで済みます。
現在の記事に対応するコード記述では、新しいクラスを作成し、呼び出しメソッドと出力メソッドをカプセル化し、組み合わせた設計パターンを簡単に使用することで、最後の新しいキャンパスと構成情報を作成できます。
完全なコードは次のとおりです。
#根
class root:
name = ''
def __init__(self, name):
self.name = name
def add(self, root):
pass
#学校类
class School(root):
childrenroot = []
def add(self, root):
self.childrenroot.append(root)
#招生办
class StudentAdmissionDept(root):
def __init__(self, name):
self.name = name
#师资部
class FacultyDepartment(root):
def __init__(self, name):
self.name = name
root = School('总部')
root.add(StudentAdmissionDept('总部招生办'))
root.add(FacultyDepartment('总部师资部'))
s1 = School('桂林校区')
s1.add(StudentAdmissionDept('桂林校区 招生办'))
s1.add(FacultyDepartment('桂林校区 师资部'))
root.add(s1)
s2 = School('深圳校区')
s2.add(StudentAdmissionDept('深圳校区 招生办'))
s2.add(FacultyDepartment('深圳校区 师资部'))
root.add(s2)
s3 = School('广州校区')
s3.add(StudentAdmissionDept('广州校区 招生办'))
s3.add(FacultyDepartment('广州校区 师资部'))
root.add(s3)
print('\n',root.name,'下级学校层级:\n')
for i in root.childrenroot:
print(i.name)