Wahrscheinlich fehlt mir etwas einfaches, aber ich verstehe nicht, wie Rubys DelegateClass
Methode zu verwenden, ich meine, wenn es statt SimpleDelegator
Klasse zu verwenden. Zum Beispiel alle folgenden scheinen meist identisch zu arbeiten:Wann Ruby DelegateClass anstelle von SimpleDelegator verwenden? (DelegateClass-Methode vs. SimpleDelegator-Klasse)
require 'delegate'
a = SimpleDelegator.new([0])
b = DelegateClass(Array).new([0])
c = DelegateClass(String).new([0])
a << 1
b << 2
c << 3
p a # => [0, 1]
p b # => [0, 2]
p C# => [0, 3]
Beachten Sie, dass es keine Rolle scheint die Klasse zu DelegateClass
geben wird.
Nach einiger Zeit darüber nachzudenken, das ganze Delegator Pattern mir sieht aus wie ein schnell schmutzig Hack :). Sie senden eine Nachricht, und Sie wissen nicht, welche Klasse für die Beantwortung zuständig ist. Der Delegator durchläuft alle Nachrichten, die er nicht erkennt, ohne zu wissen, ob und wie er beantwortet wird (andernfalls könnte er als Unterklasse realisiert werden, oder die Komposition verwenden, nicht wahr?). Die ursprüngliche Klasse kontrolliert wirklich nichts mehr und weiß nicht einmal, dass es einen Delegierer zwischen ihr und dem Rest der Welt gibt. – Alexey