Zusammengesetzter Modus
Wir betrachten den zusammengesetzten Modus als eine komplexe Attributstruktur. Tatsächlich gibt es im Wesentlichen drei Rollen: Stamm (der einige Operationen zum Betreiben von Blättern definiert), Zweige (es gibt viele Zweige am Stamm) und Blätter (denken Sie an Rumpf) Objekte, die manipuliert werden müssen), das zusammengesetzte Muster hilft uns zu erkennen: Das heißt, wenn sie als Objekte fungieren, sind sie immer noch genauso einfach wie andere Objekte und sorgen so für Konsistenz
Python-Beispiel
class Trunk(object): '''树干''' def __str__(self): pass def subtree(self): pass class Composite(Trunk): def __init__(self, left=None, right=None, length=None): self.left=left self.right=right self.length=length def __str__(self): # 这个结果是在调用subtree()的时候返回 if self.length: return "(" + self.left.__str__() + ", " + self.right.__str__() + ")" + ": " + str(self.length) else: return "(" + self.left.__str__() + ", " + self.right.__str__() + ")" # 这里其实就是一个技巧,通过这个函数返回下一级的对象,也就是它既是对象还可以是对象的容器 def subtree(self): return Composite(self.left, self.right) class Leaf(Trunk): '''叶子类,它没办法继续延伸了''' def __init__(self, name, length=None): self.name = name self.length=length self.left = None self.right = None def __str__(self): return self.name + ": " + str(self.length) def subtree(self): return Leaf(self.name, self.length) if __name__ == "__main__": # 只有叶子那么就直接返回__str__的拼装结果 t1 = Leaf('A', 0.71399) print t1 # 有个2个叶子的组合,返回的是2个叶子的对象的组合 t2 = Composite(Leaf('B', -0.00804), Leaf('C', 0.07470)) print t2 # 这个是嵌套的叶子的组合,树干上面有树枝,树枝上面有叶子 t3 = Composite(Leaf('A', 0.71399), Composite(Leaf('B', -0.00804), Leaf('C', 0.07470), 0.1533), 0.0666) print t3 # 直接通过左右节点找到对应的叶子对象了 t4 = t3.right.right.subtree() print t4 # t3的左树其实就是叶子对象了 t5 = t3.left.subtree() print t5
Chain-of-Responsibility-Modell
Als wir noch studierten, lagen die Testergebnisse beispielsweise in mehreren Noten, beispielsweise 90-100 Punkten , 80-90 Punkte, okay, ich möchte ein Feedback geben, das Ihre akademischen Leistungen basierend auf den Ergebnissen ausdrückt. Zum Beispiel ist 90-100 A+, 80-90 ist A, 70-80 ist B+ ... Natürlich Sie Um dies zu erreichen, kann ich viele Methoden verwenden: Verwenden Sie eine Reihe von Klassen, um zu reagieren, aber nur wenn sie auf eine für die Verarbeitung geeignete Klasse stoßen, werden sie verarbeitet, ähnlich wie bei case und switch >
class BaseHandler: # 它起到了链的作用 def successor(self, successor): self.successor = successor class ScoreHandler1(BaseHandler): def handle(self, request): if request > 90 and request <= 100: return "A+" else: # 否则传给下一个链,下同,但是我是要return回结果的 return self.successor.handle(request) class ScoreHandler2(BaseHandler): def handle(self, request): if request > 80 and request <= 90: return "A" else: return self.successor.handle(request) class ScoreHandler3(BaseHandler): def handle(self, request): if request > 70 and request <= 80: return "B+" else: return "unsatisfactory result" class Client: def __init__(self): h1 = ScoreHandler1() h2 = ScoreHandler2() h3 = ScoreHandler3() # 注意这个顺序,h3包含一个类似于default结果的东西,是要放在最后的,其他的顺序是无所谓的,比如h1和h2 h1.successor(h2) h2.successor(h3) requests = {'zhangsan': 78, 'lisi': 98, 'wangwu': 82, 'zhaoliu': 60} for name, score in requests.iteritems(): print '{} is {}'.format(name, h1.handle(score)) if __name__== "__main__": client = Client()
Weitere Artikel zu Pythons Kombinationsmodus und Programmierbeispielen für den Chain-of-Responsibility-Modus finden Sie im PHP-Chinesisch Webseite!