Non penso che la discussione del podcast sui "componenti" sia direttamente nel contesto del pattern composito . Stanno parlando di ingegneria del software basata sui componenti . Suppongo che questa sia una delle trappole dell'ambiguità della terminologia dello sviluppo del software.
Ma, mettendo da parte per discutere il pattern composito, c'è una bella spiegazione qui , nel caso in cui non l'hai letto .
Fondamentalmente, nel modello composito, una classe Componente è semplicemente una classe che fornisce alcune funzionalità astratte. Nella maggior parte dei casi di utilizzo del mondo reale, è una classe con un'interfaccia per l'output di dati, come un post o un messaggio. In ruby, implementerò una classe Message
:
class Message
def initialize
@message = ''
end
def display
#abstract
end
end
Nel modello composito, una Foglia è una singola entità, che generalmente visualizza solo una unità di informazioni. Nel nostro esempio, un singolo messaggio produrrà semplicemente la stringa con cui viene creata un'istanza con:
class Single < Message
def initialize(message)
@message = message if message.is_a?(String)
end
def display
puts @message
end
end
Nel pattern composito, un Composito è un oggetto che può contenere altri componenti, indipendentemente dal fatto che quei componenti siano essi stessi Composite o semplicemente Leaves singoli. Per il nostro esempio, creerò una classe di messaggi multipli:
class Multiple < Message
def initialize
@message = []
end
def display
@message.each do |message|
message.display
end
end
def add (message)
message = Single.new(message) if message.is_a?(String)
@message << message if message.is_a?(Message)
end
end
Il risultato finale è che più oggetti messaggio possono contenere singoli messaggi e più messaggi nidificati multipli
m1 = Multiple.new
m1.add 'Hello!'
m1.add 'Hola!'
m1.add 'Bienvenue!'
m2 = Multiple.new
m2.add 'Salut!'
m2.add 'Jumbo!'
m1.add m2
m1.display
Questo codice verrà emesso:
Hello!
Hola!
Bienvenue!
Salut!
Jumbo!
In metafora, suppongo che una Componente potrebbe essere come un dirigente di un'azienda. Qualsiasi dirigente esecutivo può lavorare da solo o essere il capo di una divisione o dipartimento. Ma quando vai in giro e chiedi quanti soldi avrà bisogno ogni dirigente per il prossimo anno fiscale, non ti interessa quale sia. Se lavorano da soli, ti diranno semplicemente quale sia il loro stipendio / dovrebbe essere. Se sono a capo di una divisione, aggiungeranno il denaro necessario a tutti gli impiegati che lavorano sotto di loro. Questi dipendenti potrebbero anche non essere i capi delle sottodivisioni, nel qual caso lo stesso processo si verificherebbe in modo ricorsivo.
Spero che ti aiuti!