diff --git a/Sitbon-Benjamin-Lab3-Task3/Calories.java b/Sitbon-Benjamin-Lab3-Task3/Calories.java
new file mode 100644
index 0000000000000000000000000000000000000000..9600e84fccc4341d0be19c6558e4a442da6b1922
--- /dev/null
+++ b/Sitbon-Benjamin-Lab3-Task3/Calories.java
@@ -0,0 +1,11 @@
+public interface Calories {
+
+    public static int caloriesValueOf(Fruits f){
+        return f.getCalories();
+    }
+
+    public void connect(Fruit f);
+    public void setQuotient(int q);
+    public int getQuotient();
+    public int value(Fruits f);
+}
\ No newline at end of file
diff --git a/Sitbon-Benjamin-Lab3-Task3/CaloriesEnrichi.java b/Sitbon-Benjamin-Lab3-Task3/CaloriesEnrichi.java
new file mode 100644
index 0000000000000000000000000000000000000000..95fb53369d2c88a2c5cf34065405ffda5351ede5
--- /dev/null
+++ b/Sitbon-Benjamin-Lab3-Task3/CaloriesEnrichi.java
@@ -0,0 +1,42 @@
+import java.util.ArrayList;
+
+import java.util.ArrayList;
+
+public class CaloriesEnrichi implements Calories{
+
+    private String[] fruits = {"Avocat","Banane","Mangue"};
+    private int quotient = 100;
+    private ArrayList<Fruit> observer = new ArrayList<>();
+
+
+    public int getQuotient(){
+        return this.quotient;
+    }
+
+    public void setQuotient(int q){
+        this.quotient = q;
+        notifyAll(observer);
+    }
+
+    public void connect(Fruit f){
+        observer.add(f);
+    }
+
+    public void notifyAll(ArrayList<Fruit> list){
+        for(Fruit f: list){
+            f.update();
+        }
+    }
+
+    public int value(Fruits f){
+        
+        for(int i = 0; i<fruits.length; i++){
+            if(fruits[i].equals(f.getName())){
+                return quotient/(i+1);
+            }
+        }
+
+        return 0;
+    }
+
+}
\ No newline at end of file
diff --git a/Sitbon-Benjamin-Lab3-Task3/CaloriesNormal.java b/Sitbon-Benjamin-Lab3-Task3/CaloriesNormal.java
new file mode 100644
index 0000000000000000000000000000000000000000..1ef5498227884d558f85221b8cfa6ba34b712cb8
--- /dev/null
+++ b/Sitbon-Benjamin-Lab3-Task3/CaloriesNormal.java
@@ -0,0 +1,39 @@
+import java.util.ArrayList;
+
+public class CaloriesNormal implements Calories{
+
+    private String[] fruits = {"Pomme","Fraise","Myrtille"};
+    private int quotient = 50;
+    private ArrayList<Fruit> observer = new ArrayList<>();
+
+
+    public int getQuotient(){
+        return this.quotient;
+    }
+
+    public void setQuotient(int q){
+        this.quotient = q;
+        notifyAll(observer);
+    }
+
+    public void connect(Fruit f){
+        observer.add(f);
+    }
+
+    public void notifyAll(ArrayList<Fruit> list){
+        for(Fruit f: list){
+            f.update();
+        }
+    }
+
+    public int value(Fruits f){
+        
+        for(int i = 0; i<fruits.length; i++){
+            if(fruits[i].equalsIgnoreCase(f.getName())){
+                return quotient/(i+1);
+            }
+        }
+        return 0;
+    }
+    
+}
\ No newline at end of file
diff --git a/Sitbon-Benjamin-Lab3-Task3/CaloriesPauvre.java b/Sitbon-Benjamin-Lab3-Task3/CaloriesPauvre.java
new file mode 100644
index 0000000000000000000000000000000000000000..eba16583261a7617a776818257de09b36b1c51f2
--- /dev/null
+++ b/Sitbon-Benjamin-Lab3-Task3/CaloriesPauvre.java
@@ -0,0 +1,41 @@
+import java.util.ArrayList;
+
+import java.util.ArrayList;
+
+public class CaloriesPauvre implements Calories{
+
+    private String[] fruits = {"Poire","Melon","Pastèque"};
+    private int quotient = 25;
+    private ArrayList<Fruit> observer = new ArrayList<>();
+
+
+    public int getQuotient(){
+        return this.quotient;
+    }
+
+    public void setQuotient(int q){
+        this.quotient = q;
+        notifyAll(observer);
+    }
+
+    public void connect(Fruit f){
+        observer.add(f);
+    }
+
+    public void notifyAll(ArrayList<Fruit> list){
+        for(Fruit f: list){
+            f.update();
+        }
+    }
+
+    public int value(Fruits f){
+        
+        for(int i = 0; i<fruits.length; i++){
+            if(fruits[i].equals(f.getName())){
+                return quotient/(i+1);
+            }
+        }
+        return 0;
+    }
+    
+}
\ No newline at end of file
diff --git a/Sitbon-Benjamin-Lab3-Task3/Client.java b/Sitbon-Benjamin-Lab3-Task3/Client.java
new file mode 100644
index 0000000000000000000000000000000000000000..6b76906374803263cc8c7974daa205ae2e3e9a5e
--- /dev/null
+++ b/Sitbon-Benjamin-Lab3-Task3/Client.java
@@ -0,0 +1,26 @@
+import java.util.Scanner;
+
+public class Client {
+
+    public static void main(String[] args) {
+
+        Calories normal = new CaloriesNormal();
+        Calories pauvre = new CaloriesPauvre();
+        Calories riche = new CaloriesEnrichi();
+
+        Fruit fraise = new Fruit(normal,"Fraise",false);
+        Fruit melon = new Fruit(pauvre,"Melon",false);
+        Fruit avocat = new Fruit(riche,"Avocat",true);
+        Fruit banane = new Fruit(riche,"Banane",false);
+        Fruit banane2 = new Fruit(riche,"Banane",false);
+
+
+        normal.setQuotient(30);
+        riche.setQuotient(120);
+
+        
+
+    }
+    
+    
+}
\ No newline at end of file
diff --git a/Sitbon-Benjamin-Lab3-Task3/Fruit.java b/Sitbon-Benjamin-Lab3-Task3/Fruit.java
new file mode 100644
index 0000000000000000000000000000000000000000..5cda99e960afd8088e37f9ee8856956c88ab43d6
--- /dev/null
+++ b/Sitbon-Benjamin-Lab3-Task3/Fruit.java
@@ -0,0 +1,49 @@
+public class Fruit implements Fruits{
+
+
+    private String name;
+    private boolean pepin;
+    private Calories calories;
+
+    public Fruit(Calories cal,String n, boolean p){
+        this.calories = cal;
+        this.name = n;
+        this.pepin = p;
+        cal.connect(this);
+    }
+
+    public void setName(String n){
+        this.name = n;
+    }
+
+    public void setPepin(boolean p){
+        this.pepin = p;
+    }
+
+    public String getName(){
+        return this.name;
+    }
+
+    public int getCalories(){
+        return this.calories.value(this);
+    }
+
+    public boolean getPepin(){
+        return this.pepin;
+    }
+
+    public void update(){
+        System.out.println("Les calories on été modifié pour " + this.name + ": " + this.getCalories());
+    }
+
+    public void afficherFruit(){
+        System.out.println("");
+        System.out.println(this.name + " - " + this.pepin);
+        System.out.println("");
+    }
+
+    public void afficherCalories(){
+        System.out.println("Calories: " + getCalories());
+    }
+
+}
\ No newline at end of file
diff --git a/Sitbon-Benjamin-Lab3-Task3/Fruits.java b/Sitbon-Benjamin-Lab3-Task3/Fruits.java
new file mode 100644
index 0000000000000000000000000000000000000000..0ef5707a3b562220169375a23f85feb20a67c32b
--- /dev/null
+++ b/Sitbon-Benjamin-Lab3-Task3/Fruits.java
@@ -0,0 +1,9 @@
+public interface Fruits {
+
+    public String getName();
+    public int getCalories();
+    public boolean getPepin();  
+    public void afficherFruit();
+    public void afficherCalories();
+
+}
\ No newline at end of file
diff --git a/Sitbon-Benjamin-Lab3-Task3/PanierFruit.java b/Sitbon-Benjamin-Lab3-Task3/PanierFruit.java
new file mode 100644
index 0000000000000000000000000000000000000000..ff9a4aef49eb3b36a47bda200d4f9168383179ec
--- /dev/null
+++ b/Sitbon-Benjamin-Lab3-Task3/PanierFruit.java
@@ -0,0 +1,63 @@
+import java.util.ArrayList;
+
+public class PanierFruit implements Fruits{
+
+    
+    private ArrayList<Fruits> panier = new ArrayList<>();
+    private String name = "Panier(";
+    private boolean pepin = false;
+
+
+    public PanierFruit(Fruits... fruits){
+        this.addAll(fruits);
+    }
+
+    public String getName(){
+        return this.name;
+    }
+
+    public int getCalories(){
+        int res = 0;
+        for(Fruits f: panier){
+            res += Calories.caloriesValueOf(f);
+        }
+        return res;
+    }
+
+    public void add(Fruits f){
+
+        panier.add(f);
+        name += " " + f.getName() + " ";
+        if(f.getPepin()) pepin = true;
+    }
+
+    public void addAll(Fruits... fruits){
+        for(Fruits f: fruits){
+            this.add(f);
+        }
+    }
+
+    public boolean getPepin(){
+        return pepin;
+    }
+
+    public void afficherFruit(){
+        System.out.println("");
+        System.out.print(name);
+
+        if(pepin){
+            System.out.print(") Avec Pépin");   
+        }
+        else{
+            System.out.print(") Sans Pépin");
+        }
+        System.out.println("");
+        System.out.println("");
+    }
+
+    public void afficherCalories(){
+
+        
+        System.out.println("Calories: " + this.getCalories());
+    }
+}
\ No newline at end of file
diff --git a/Sitbon-Benjamin-Lab3-Task3/Sitbon-Benjamin-Lab3-Task3.zip b/Sitbon-Benjamin-Lab3-Task3/Sitbon-Benjamin-Lab3-Task3.zip
new file mode 100644
index 0000000000000000000000000000000000000000..c62da7be9e9e23b41773c981beb7ffc026d60750
Binary files /dev/null and b/Sitbon-Benjamin-Lab3-Task3/Sitbon-Benjamin-Lab3-Task3.zip differ