"Composite tervminta" "Ebben a példában az Asset absztrakt ostály egy felületet biztosít a konkrét Security és a CompositeAsset (tervmintánkat megvalósíto ostály) részére. CompositeAsset value metódusa az összes Asset példány value-jának az összegét adja vissza, a containsSecurity pedig megmondja hogy a listában levő Assetek közül valamelyik megegyezik-e a aSecurity paraméterrel." Object subclass: #Asset instanceVariables: '' classVariables: '' poolVariables: '' Asset>>value "Return the value of this Asset." ^self subclassResponsibility Asset>>containsSecurity: aSecurity "Answer whether this Asset contains aSecurity." ^self subclassResponsibility Asset subclass: #Security instanceVariables: 'value' classVariables: '' poolVariables: '' Security>>value "See superimplementor." ^value Security>>containsSecurity: aSecurity "See superimplementor." "For a Leaf, we'll say it includes aSecurity if it is aSecurity." ^self = aSecurity Asset subclass: #CompositeAsset instanceVariables: 'assets' classVariables: '' poolVariables: '' CompositeAsset>>assets "Return the list of assets." ^assets CompositeAsset>>value "See superimplementor." "Return the sum of the assets." ^self assets inject: 0 into: [ :sum :asset | sum + asset value] CompositeAsset>>containsSecurity: aSecurity "See superimplementor." "See if one of the assets is aSecutiry." ^self assets includes: aSecurity CompositeAsset>>containsSecurity: aSecurity "See superimplementor." "See if one of the assets is aSecutiry." self assets detect: [ :asset | asset containsSecurity: aSecurity] ifNone: [^false]. ^true