+execute() P +execute() S +execute() +addP() +removeP() +getChild() C +execute() Predicate -variableName -comparedValue +execute() SimplePredicate +execute() +addPredicate() +removePredicate() +getChild() CompositePredicate -type ValueComparingOperator -type LogicalOperator +setStrategy() +buildHouse() HouseCreator Strategies Controller +execute() Strategy +execute() ClayStrategy +execute() WoodStrategy +execute() BrickStrategy : C : S : S : C : S : S : CompositePredicate type = And : LogicalOperator comparedValue = "doggo" variableName = type : SimplePredicate comparedValue = 5 variableName = age : SimplePredicate type = Equal : ValueComparingOperator type = LessThan : ValueComparingOperator secondPiglet : Controller thirdPiglet : Controller : HouseCreator : BrickStrategy : WoodStrategy 0..* 1 0..1 2 .. * 1 1 <> <> operator operator children children Visual Paradigm Standard(macak(Masaryk University))