Я написал следующий код с намерением сделать его составным шаблоном: Я не уверен, передал ли я здесь намерение составного шаблона. Хотя согласно UML-диаграмме составного шаблона есть компонентный, листовой и составной
Но я не уверен, что это действительный дизайн составного шаблона в смысле варианта использования.
# Component
# interface for objects in the composition of
# leaf and composite nodes
class Component:
# size of sequence
def display(self):
pass
# RNA sequence
class RNALeaf(Component):
def __init__(self, name, rna_sequence):
self.__rna_sequence = rna_sequence
self.__name = name
def display(self):
print("RNA sequence: " + self.__name + " " + str(self.__rna_sequence))
# Amino acid sequence
class AminoAcidLeaf(Component):
def __init__(self, name, amino_acid_sequence):
self.__amino_acid_sequence = amino_acid_sequence
self.__name = name
def display(self):
print("Amino Acid sequence: " + self.__name + " " + str(self.__amino_acid_sequence))
class Composite(Component):
def __init__(self):
Component.__init__(self)
self._children = list()
def display(self):
for child in self._children:
child.operation()
def add(self, component):
self._children.append(component)
def remove(self, component):
self._children.remove(component)
def main ():
# Creating a composite consisting of covid known RNA segments and Amino Acid
# segments. A different strain of corona virus with a mutated RNA and its
# corresponding amino acid sequence can be created by constructing a new
# RNA and amino acid leaf with the mutation and adding (replacing) the
# original sequence.
rna_one = RNALeaf('untranslated_region', cc[0:265])
rna_two = RNALeaf('orf1a',cc[266-1:13483])
rna_three = RNALeaf('orf1b',cc[13468-1:21555])
rna_four = RNALeaf('spike_glycoprotein',cc[21563-1:25384])
rna_five = RNALeaf('orf3a',cc[25393-1:26220])
rna_six = RNALeaf('envelope_protein',cc[26245-1:26472])
rna_seven = RNALeaf('membrane_glycoprotein',cc[26523-1:27191])
rna_eight = RNALeaf('orf6',cc[27202-1:27387])
rna_nine = RNALeaf('orf7a',cc[27394-1:27759])
rna_ten = RNALeaf('orf7b',cc[27756-1:27887])
rna_eleven = RNALeaf('orf8',cc[27894-1:28259])
rna_twelve = RNALeaf('nucleocapsid_phosphoprotein',cc[28274-1:29533])
rna_thirteen = RNALeaf('orf10',cc[29558-1:29674])
aa_one = AminoAcidLeaf('orf1a',translate(cc[266-1:13483], True))
aa_two = AminoAcidLeaf('orf1b',translate(cc[13468-1:21555], False).strip("*"))
aa_three = AminoAcidLeaf('spike_glycoprotein',translate(cc[21563-1:25384], True))
aa_four = AminoAcidLeaf('orf3a',translate(cc[25393-1:26220], True))
aa_five = AminoAcidLeaf('envelope_protein',translate(cc[26245-1:26472], True))
aa_six = AminoAcidLeaf('membrane_glycoprotein',translate(cc[26523-1:27191], True))
aa_seven = AminoAcidLeaf('orf6',translate(cc[27202-1:27387], True))
aa_eight = AminoAcidLeaf('orf7a',translate(cc[27394-1:27759], True))
aa_nine = AminoAcidLeaf('orf7b',translate(cc[27756-1:27887], True))
aa_ten = AminoAcidLeaf('orf8',translate(cc[27894-1:28259], True))
aa_eleven = AminoAcidLeaf('nucleocapsid_phosphoprotein',translate(cc[28274-1:29533], True))
aa_twelve = AminoAcidLeaf('orf10',translate(cc[29558-1:29674], True))
corona_composite = Composite()
corona_composite.add(rna_one)
corona_composite.add(rna_two)
corona_composite.add(rna_three)
corona_composite.add(rna_four)
corona_composite.add(rna_five)
corona_composite.add(rna_six)
corona_composite.add(rna_seven)
corona_composite.add(rna_eight)
corona_composite.add(rna_nine)
corona_composite.add(rna_ten)
corona_composite.add(rna_eleven)
corona_composite.add(rna_twelve)
corona_composite.add(rna_thirteen)
corona_composite.add(aa_one)
corona_composite.add(aa_two)
corona_composite.add(aa_three)
corona_composite.add(aa_four)
corona_composite.add(aa_five)
corona_composite.add(aa_six)
corona_composite.add(aa_seven)
corona_composite.add(aa_eight)
corona_composite.add(aa_nine)
corona_composite.add(aa_ten)
corona_composite.add(aa_eleven)
corona_composite.add(aa_twelve)