anchor.diff:  Une subtilité est à constater içi, la classe prend également en paramètre l'interface "ProfitCalculator". 
   En effet, chaque decorator va appliquer le calcul du decorator qui le précède et va ensuite y ajouter son calcul. C'est ce comportement qui permet d'ajouter des traitements au runtime.
   
  -Nous allons commencer par une classe proposant un calcul par défaut, appelé "DefaultProfitCalculator". Il est, en effet, utile de commencer par une classe de type "profitCalculator" qui ne dépend de rien lors de son instantiation. Ceci correspond au calcul initial des decorators : 
  +Nous allons commencer par une classe proposant un calcul par défaut, appelée "DefaultProfitCalculator". Il est, en effet, utile de commencer par une classe de type "profitCalculator" qui ne dépend de rien lors de son instantiation. Ceci correspond au calcul initial des decorators : 
   
   [source,java]
   ----
  
positive.code: }
  ----
  
  Chaque méthode "static" effectue le calcul souhaité en prenant un double en paramètre et en retournant également un double.
  
  Nous allons ensuite montrer différente façons d'implémenter ce pattern en Java 8.
  
  == a) Decorator en Java 8 avec de la composition de fonctions
  
  Comme pour la partie Java 7, nous allons écrire une classe contenant le calcul par défaut : 
  
  [source,java]
  ----
  
negative.code: 
  Cette classe implémente une interface fonctionnelle (= à une fonction) proposée par défaut dans le JDK 8 "DoubleUnaryOperator". Cette fonction prend un double en entrée et retourne un double en sortie, ce qui correspond à la signature des calculs présents dans la classe Expenses. L'implémentation de la méthode applyAsDouble est effectuée avec un calcul par défaut.
  
  Et c'est tout... nous allons pouvoir désormais écrire notre decorator en Java 8 via un test : 
  
  [source,java]
  ----
  