Compare commits
	
		
			28 Commits
		
	
	
		
			ddc6253386
			...
			main
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 4af29e8f0f | |||
| 5220b27146 | |||
| 927a2232dd | |||
| fa5b8bf520 | |||
| b964385405 | |||
| ca9d0ec062 | |||
| 6eee9df1fe | |||
| 23829388cb | |||
| 64f7f56ffe | |||
| 51f5d352c6 | |||
| 7c614b0c5c | |||
| 3743b47887 | |||
| 94df35881e | |||
| 8caae17dd4 | |||
| 80b7f9e80d | |||
| 475afc0db5 | |||
| f37a8cd665 | |||
| dfd4dba1d7 | |||
| 73129fd4c1 | |||
| 42c63045b0 | |||
| d46443f6d5 | |||
| fd99c16e89 | |||
| 8f38c89d7c | |||
| 8cefde97d3 | |||
| 876ce99c77 | |||
| 6acdcaffa7 | |||
| 061a475a6b | |||
| 312a5276d7 | 
							
								
								
									
										17
									
								
								src/lab10_memento/ex1/CheckpointManager.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/lab10_memento/ex1/CheckpointManager.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| package lab10_memento.ex1; | ||||
|  | ||||
| public class CheckpointManager { | ||||
|     private Player.Checkpoint lastCheckpoint = null; | ||||
|  | ||||
|     public void save(Player player) { | ||||
|         lastCheckpoint = player.makeCheckpoint(); | ||||
|     } | ||||
|  | ||||
|     public void restore(Player player) { | ||||
|         if (lastCheckpoint != null) { | ||||
|             lastCheckpoint.restore(player); | ||||
|         } else { | ||||
|             System.out.println("No checkpoint to restore"); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										60
									
								
								src/lab10_memento/ex1/Game.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								src/lab10_memento/ex1/Game.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,60 @@ | ||||
| package lab10_memento.ex1; | ||||
|  | ||||
| public class Game { | ||||
|     private final Player player; | ||||
|     private final CheckpointManager checkpointManager; | ||||
|  | ||||
|     public Game() { | ||||
|         player = new Player(0, 0, 0); | ||||
|         checkpointManager = new CheckpointManager(); | ||||
|     } | ||||
|  | ||||
|     public void printInfo() { | ||||
|         System.out.println("Player position: (" + player.getX() + "," + player.getY() + ")"); | ||||
|         System.out.println("Player score: " + player.getScore()); | ||||
|         System.out.println(); | ||||
|     } | ||||
|  | ||||
|     public void doTurn(int dx, int dy, int score, boolean isCheckpoint) { | ||||
|         player.moveTo(player.getX() + dx, player.getY() + dy); | ||||
|         System.out.print("Player moves to (" + player.getX() + "," + player.getY() + ")"); | ||||
|         if (score != 0) { | ||||
|             player.increaseScore(score); | ||||
|             System.out.print(" and gains +" + score + " score"); | ||||
|         } | ||||
|         if (isCheckpoint) { | ||||
|             checkpointManager.save(player); | ||||
|             System.out.print(". It's a checkpoint and their position and score are saved"); | ||||
|         } | ||||
|         System.out.println(); | ||||
|         printInfo(); | ||||
|     } | ||||
|  | ||||
|     public void doTurn(int dx, int dy) { | ||||
|         doTurn(dx, dy, 0, false); | ||||
|     } | ||||
|  | ||||
|     public void doTurn(int dx, int dy, int score) { | ||||
|         doTurn(dx, dy, score, false); | ||||
|     } | ||||
|  | ||||
|     public void doTurn(int dx, int dy, boolean isCheckpoint) { | ||||
|         doTurn(dx, dy, 0, isCheckpoint); | ||||
|     } | ||||
|  | ||||
|     public void die() { | ||||
|         checkpointManager.restore(player); | ||||
|         System.out.println("Player died ! Returning to previous checkpoint"); | ||||
|         printInfo(); | ||||
|     } | ||||
|  | ||||
|     public static void main(String[] args) { | ||||
|         Game game = new Game(); | ||||
|  | ||||
|         game.printInfo(); | ||||
|         game.doTurn(1, 1, 100); | ||||
|         game.doTurn(1, 1, true); | ||||
|         game.doTurn(4, 4, 100); | ||||
|         game.die(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										68
									
								
								src/lab10_memento/ex1/Player.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								src/lab10_memento/ex1/Player.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| package lab10_memento.ex1; | ||||
|  | ||||
| public class Player { | ||||
|     private int x; | ||||
|     private int y; | ||||
|     private int score; | ||||
|  | ||||
|     public Player(int x, int y, int score) { | ||||
|         this.x = x; | ||||
|         this.y = y; | ||||
|         this.score = score; | ||||
|     } | ||||
|  | ||||
|     public void moveTo(int x, int y) { | ||||
|         this.x = x; | ||||
|         this.y = y; | ||||
|     } | ||||
|  | ||||
|     public void increaseScore(int score) { | ||||
|         this.score += score; | ||||
|     } | ||||
|  | ||||
|     public int getX() { | ||||
|         return x; | ||||
|     } | ||||
|  | ||||
|     public int getY() { | ||||
|         return y; | ||||
|     } | ||||
|  | ||||
|     public int getScore() { | ||||
|         return score; | ||||
|     } | ||||
|  | ||||
|     public Checkpoint makeCheckpoint() { | ||||
|         return new Checkpoint(this); | ||||
|     } | ||||
|  | ||||
|     public class Checkpoint { | ||||
|         private final int x; | ||||
|         private final int y; | ||||
|         private final int score; | ||||
|  | ||||
|         public Checkpoint(Player player) { | ||||
|             x = player.getX(); | ||||
|             y = player.getY(); | ||||
|             score = player.getScore(); | ||||
|         } | ||||
|  | ||||
|         public int getX() { | ||||
|             return x; | ||||
|         } | ||||
|  | ||||
|         public int getY() { | ||||
|             return y; | ||||
|         } | ||||
|  | ||||
|         public int getScore() { | ||||
|             return score; | ||||
|         } | ||||
|  | ||||
|         public void restore(Player player) { | ||||
|             player.x = this.getX(); | ||||
|             player.y = this.getY(); | ||||
|             player.score = this.getScore(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										16
									
								
								src/lab11_flyweight/ex1/Brush.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/lab11_flyweight/ex1/Brush.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| package lab11_flyweight.ex1; | ||||
|  | ||||
| public class Brush implements DrawingTool { | ||||
|     private final Props props; | ||||
|  | ||||
|     public Brush(Props props) { | ||||
|         this.props = props; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void draw(String text) { | ||||
|         System.out.println("Drawing '" + text + "' in " + props.size + ", color:" + props.color); | ||||
|     } | ||||
|  | ||||
|     public record Props(Size size, Color color) {} | ||||
| } | ||||
							
								
								
									
										17
									
								
								src/lab11_flyweight/ex1/BrushFactory.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/lab11_flyweight/ex1/BrushFactory.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| package lab11_flyweight.ex1; | ||||
|  | ||||
| import java.util.HashMap; | ||||
| import java.util.Map; | ||||
|  | ||||
| public class BrushFactory { | ||||
|     private final Map<Brush.Props, Brush> brushes = new HashMap<>(); | ||||
|  | ||||
|     public Brush getBrush(Brush.Props props) { | ||||
|         Brush brush = brushes.get(props); | ||||
|         if (brush == null) { | ||||
|             brush = new Brush(props); | ||||
|             brushes.put(props, brush); | ||||
|         } | ||||
|         return brush; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										6
									
								
								src/lab11_flyweight/ex1/Color.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/lab11_flyweight/ex1/Color.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| package lab11_flyweight.ex1; | ||||
|  | ||||
| public enum Color { | ||||
|     BLUE, | ||||
|     RED | ||||
| } | ||||
							
								
								
									
										5
									
								
								src/lab11_flyweight/ex1/DrawingTool.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/lab11_flyweight/ex1/DrawingTool.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| package lab11_flyweight.ex1; | ||||
|  | ||||
| public interface DrawingTool { | ||||
|     void draw(String text); | ||||
| } | ||||
							
								
								
									
										31
									
								
								src/lab11_flyweight/ex1/Main.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								src/lab11_flyweight/ex1/Main.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| package lab11_flyweight.ex1; | ||||
|  | ||||
| public class Main { | ||||
|     public static void main(String[] args) { | ||||
|         BrushFactory factory = new BrushFactory(); | ||||
|         Brush.Props props1 = new Brush.Props(Size.THICK, Color.RED); | ||||
|         Brush.Props props2 = new Brush.Props(Size.THIN, Color.BLUE); | ||||
|         DrawingTool brush1 = factory.getBrush(props1); | ||||
|         DrawingTool brush2 = factory.getBrush(props1); | ||||
|  | ||||
|         brush1.draw("I am drawing with my first thick red brush"); | ||||
|         brush2.draw("I am drawing with my second thick red brush"); | ||||
|         System.out.println("first thick red brush hashcode: " + brush1.hashCode()); | ||||
|         System.out.println("second thick red brush hashcode: " + brush2.hashCode()); | ||||
|  | ||||
|         System.out.println(); | ||||
|         DrawingTool pencil = new Pencil(); | ||||
|         pencil.draw("Bonjour"); | ||||
|         System.out.println(); | ||||
|  | ||||
|         DrawingTool brush3 = factory.getBrush(props2); | ||||
|         DrawingTool brush4 = factory.getBrush(props2); | ||||
|  | ||||
|         brush3.draw("I am drawing with my first thin blue brush"); | ||||
|         brush4.draw("I am drawing with my second thin blue brush"); | ||||
|         System.out.println("first thin blue brush hashcode: " + brush3.hashCode()); | ||||
|         System.out.println("second thin blue brush hashcode: " + brush4.hashCode()); | ||||
|  | ||||
|  | ||||
|     } | ||||
| } | ||||
							
								
								
									
										8
									
								
								src/lab11_flyweight/ex1/Pencil.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/lab11_flyweight/ex1/Pencil.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| package lab11_flyweight.ex1; | ||||
|  | ||||
| public class Pencil implements DrawingTool { | ||||
|     @Override | ||||
|     public void draw(String text) { | ||||
|         System.out.println("Pencil writes some content: " + text); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										6
									
								
								src/lab11_flyweight/ex1/Size.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/lab11_flyweight/ex1/Size.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| package lab11_flyweight.ex1; | ||||
|  | ||||
| public enum Size { | ||||
|     THIN, | ||||
|     THICK | ||||
| } | ||||
							
								
								
									
										29
									
								
								src/lab12_singleton/ex1/CarSensorSingletonLauncher.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								src/lab12_singleton/ex1/CarSensorSingletonLauncher.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| package lab12_singleton.ex1; | ||||
|  | ||||
| import lab12_singleton.ex1.sensors.*; | ||||
| import lab12_singleton.ex1.managers.*; | ||||
|  | ||||
| public class CarSensorSingletonLauncher { | ||||
|     public CarSensorSingletonLauncher() { | ||||
|  | ||||
|     } | ||||
|  | ||||
|     public static void main(String[] args) { | ||||
|         CarSensorSingletonLauncher launcher = new CarSensorSingletonLauncher(); | ||||
|         launcher.launch(); | ||||
|     } | ||||
|  | ||||
|     public void launch() { | ||||
|         this.test(SimpleSingletonSensorsManager.getInstance()); | ||||
|         this.test(SynchSingletonSensorsManager.getInstance()); | ||||
|         this.test(EagerSingletonSensorsManager.getInstance()); | ||||
|         this.test(DbleCheckedSingletonSensorsManager.getInstance()); | ||||
|     } | ||||
|  | ||||
|     private void test(SingletonSensorManager manager) { | ||||
|         manager.addSensor(new TemperatureSensor()); | ||||
|         manager.addSensor(new SpeedSensor()); | ||||
|         manager.addSensor(new RoadConditionSensor()); | ||||
|         manager.printState(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										15
									
								
								src/lab12_singleton/ex1/Sensor.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/lab12_singleton/ex1/Sensor.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| package lab12_singleton.ex1; | ||||
|  | ||||
| public abstract class Sensor { | ||||
|     private boolean ok = true; | ||||
|  | ||||
|     public abstract String getName(); | ||||
|     public void setOk(boolean ok) { | ||||
|         this.ok = ok; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String toString() { | ||||
|         return getName() + ": " + (ok ? "Ok" : "Warning"); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										17
									
								
								src/lab12_singleton/ex1/SingletonSensorManager.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/lab12_singleton/ex1/SingletonSensorManager.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| package lab12_singleton.ex1; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
|  | ||||
| public abstract class SingletonSensorManager { | ||||
|     private final ArrayList<Sensor> sensors = new ArrayList<>(); | ||||
|  | ||||
|     protected SingletonSensorManager() {} | ||||
|  | ||||
|     public void addSensor(Sensor sensor) { | ||||
|         sensors.add(sensor); | ||||
|     } | ||||
|  | ||||
|     public void printState() { | ||||
|         System.out.println("<" + this.getClass().getSimpleName() + ": " + sensors.toString() + ">"); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,18 @@ | ||||
| package lab12_singleton.ex1.managers; | ||||
|  | ||||
| import lab12_singleton.ex1.SingletonSensorManager; | ||||
|  | ||||
| public class DbleCheckedSingletonSensorsManager extends SingletonSensorManager { | ||||
|     private static DbleCheckedSingletonSensorsManager instance; | ||||
|  | ||||
|     public static DbleCheckedSingletonSensorsManager getInstance() { | ||||
|         if (instance == null) { | ||||
|             synchronized (DbleCheckedSingletonSensorsManager.class) { | ||||
|                 if (instance == null) { | ||||
|                     instance = new DbleCheckedSingletonSensorsManager(); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return instance; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,11 @@ | ||||
| package lab12_singleton.ex1.managers; | ||||
|  | ||||
| import lab12_singleton.ex1.SingletonSensorManager; | ||||
|  | ||||
| public class EagerSingletonSensorsManager extends SingletonSensorManager { | ||||
|     private static final EagerSingletonSensorsManager instance = new EagerSingletonSensorsManager(); | ||||
|  | ||||
|     public static EagerSingletonSensorsManager getInstance() { | ||||
|         return instance; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,14 @@ | ||||
| package lab12_singleton.ex1.managers; | ||||
|  | ||||
| import lab12_singleton.ex1.SingletonSensorManager; | ||||
|  | ||||
| public class SimpleSingletonSensorsManager extends SingletonSensorManager { | ||||
|     private static SimpleSingletonSensorsManager instance; | ||||
|  | ||||
|     public static SingletonSensorManager getInstance() { | ||||
|         if (instance == null) { | ||||
|             instance = new SimpleSingletonSensorsManager(); | ||||
|         } | ||||
|         return instance; | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,14 @@ | ||||
| package lab12_singleton.ex1.managers; | ||||
|  | ||||
| import lab12_singleton.ex1.SingletonSensorManager; | ||||
|  | ||||
| public class SynchSingletonSensorsManager extends SingletonSensorManager { | ||||
|     private static SynchSingletonSensorsManager instance; | ||||
|  | ||||
|     public static synchronized SynchSingletonSensorsManager getInstance() { | ||||
|         if (instance == null) { | ||||
|             instance = new SynchSingletonSensorsManager(); | ||||
|         } | ||||
|         return instance; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										10
									
								
								src/lab12_singleton/ex1/sensors/RoadConditionSensor.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/lab12_singleton/ex1/sensors/RoadConditionSensor.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| package lab12_singleton.ex1.sensors; | ||||
|  | ||||
| import lab12_singleton.ex1.Sensor; | ||||
|  | ||||
| public class RoadConditionSensor extends Sensor { | ||||
|     @Override | ||||
|     public String getName() { | ||||
|         return "Road Condition"; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										10
									
								
								src/lab12_singleton/ex1/sensors/SpeedSensor.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/lab12_singleton/ex1/sensors/SpeedSensor.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| package lab12_singleton.ex1.sensors; | ||||
|  | ||||
| import lab12_singleton.ex1.Sensor; | ||||
|  | ||||
| public class SpeedSensor extends Sensor { | ||||
|     @Override | ||||
|     public String getName() { | ||||
|         return "Speed"; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										10
									
								
								src/lab12_singleton/ex1/sensors/TemperatureSensor.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/lab12_singleton/ex1/sensors/TemperatureSensor.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| package lab12_singleton.ex1.sensors; | ||||
|  | ||||
| import lab12_singleton.ex1.Sensor; | ||||
|  | ||||
| public class TemperatureSensor extends Sensor { | ||||
|     @Override | ||||
|     public String getName() { | ||||
|         return "Temperature"; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										27
									
								
								src/lab13_proxy/ex1/Image.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/lab13_proxy/ex1/Image.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| package lab13_proxy.ex1; | ||||
|  | ||||
| public class Image { | ||||
|     protected final String path; | ||||
|     protected final String resolution; | ||||
|     protected boolean loaded = false; | ||||
|  | ||||
|     public Image(String path, String resolution) { | ||||
|         this.path = path; | ||||
|         this.resolution = resolution; | ||||
|     } | ||||
|  | ||||
|     public void load() { | ||||
|         if (!loaded) { | ||||
|             System.out.println("Image " + path + " is loaded in " + resolution + " resolution"); | ||||
|             loaded = true; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public boolean isLoaded() { | ||||
|         return loaded; | ||||
|     } | ||||
|  | ||||
|     public void showImage(User user) { | ||||
|         System.out.println("Image " + path + " is shown in " + resolution + " resolution for user " + user.getName()); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										24
									
								
								src/lab13_proxy/ex1/ImageProxy.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/lab13_proxy/ex1/ImageProxy.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| package lab13_proxy.ex1; | ||||
|  | ||||
| public class ImageProxy extends Image { | ||||
|     private final Image lowResImage; | ||||
|     private final Image highResImage; | ||||
|  | ||||
|     public ImageProxy(String path) { | ||||
|         super(path, "high"); | ||||
|         lowResImage = new Image(path, "low"); | ||||
|         highResImage = new Image(path, "high"); | ||||
|     } | ||||
|  | ||||
|     public void showImage(User user) { | ||||
|         System.out.println(user.getName() + " selects preview image " + path + " and wants to see its full resolution."); | ||||
|         if (RegistrationService.isRegistered(user)) { | ||||
|             highResImage.load(); | ||||
|             highResImage.showImage(user); | ||||
|         } else { | ||||
|             System.out.println("User " + user.getName() + " is not registered. Showing preview image in low resolution"); | ||||
|             lowResImage.load(); | ||||
|             lowResImage.showImage(user); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										19
									
								
								src/lab13_proxy/ex1/Main.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/lab13_proxy/ex1/Main.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| package lab13_proxy.ex1; | ||||
|  | ||||
| public class Main { | ||||
|     public static void main(String[] args) { | ||||
|         User jean = new User("Jean"); | ||||
|         User paul = new User("Paul"); | ||||
|         User pierre = new User("Pierre"); | ||||
|  | ||||
|         RegistrationService.register(paul); | ||||
|  | ||||
|         Image highResolutionImage1 = new ImageProxy("sample/veryHighResPhoto1.jpeg"); | ||||
|         Image highResolutionImage2 = new ImageProxy("sample/veryHighResPhoto2.jpeg"); | ||||
|         Image highResolutionImage3 = new ImageProxy("sample/veryHighResPhoto3.jpeg"); | ||||
|  | ||||
|         highResolutionImage1.showImage(jean); | ||||
|         highResolutionImage2.showImage(paul); | ||||
|         highResolutionImage3.showImage(pierre); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										15
									
								
								src/lab13_proxy/ex1/RegistrationService.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/lab13_proxy/ex1/RegistrationService.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| package lab13_proxy.ex1; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
|  | ||||
| public class RegistrationService { | ||||
|     private static final ArrayList<User> users = new ArrayList<>(); | ||||
|     public static void register(User user) { | ||||
|         System.out.println(user.getName() + " is now registered"); | ||||
|         users.add(user); | ||||
|     } | ||||
|  | ||||
|     public static boolean isRegistered(User user) { | ||||
|         return users.contains(user); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										13
									
								
								src/lab13_proxy/ex1/User.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/lab13_proxy/ex1/User.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| package lab13_proxy.ex1; | ||||
|  | ||||
| public class User { | ||||
|     private final String name; | ||||
|  | ||||
|     public User(String name) { | ||||
|         this.name = name; | ||||
|     } | ||||
|  | ||||
|     public String getName() { | ||||
|         return name; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										36
									
								
								src/lab13_proxy/ex2/Account.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								src/lab13_proxy/ex2/Account.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| package lab13_proxy.ex2; | ||||
|  | ||||
| import java.util.Random; | ||||
|  | ||||
| public class Account { | ||||
|     private int balance; | ||||
|     private int accountNumber; | ||||
|     private String owner; | ||||
|  | ||||
|     public Account(String owner, int startBalance) { | ||||
|         this.owner = owner; | ||||
|         this.balance = startBalance; | ||||
|         this.accountNumber = new Random().hashCode(); | ||||
|     } | ||||
|  | ||||
|     public void deposit(int amount) { | ||||
|         balance += amount; | ||||
|     } | ||||
|  | ||||
|     public void withdraw(int amount) { | ||||
|         balance -= amount; | ||||
|     } | ||||
|  | ||||
|     public String getOwner() { | ||||
|         return owner; | ||||
|     } | ||||
|  | ||||
|     public int getBalance() { | ||||
|         return balance; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String toString() { | ||||
|         return "account " + this.accountNumber + " belonging to " + this.owner; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										52
									
								
								src/lab13_proxy/ex2/Bank.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								src/lab13_proxy/ex2/Bank.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| package lab13_proxy.ex2; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
|  | ||||
| public class Bank { | ||||
|     private final ArrayList<String> blacklistedClients = new ArrayList<>(); | ||||
|  | ||||
|     public void blacklist(String client) { | ||||
|         blacklistedClients.add(client); | ||||
|     } | ||||
|     public boolean isBlacklisted(String client) { | ||||
|         return blacklistedClients.contains(client); | ||||
|     } | ||||
|  | ||||
|     public void deposit(String client, Account account, int amount) { | ||||
|         if (amount < 0) { | ||||
|             System.out.println("Cannot deposit a negative amount"); | ||||
|             return; | ||||
|         } | ||||
|         if (isBlacklisted(client)) { | ||||
|             System.out.println(client + " is on a blacklist and does not have the right to DEPOSIT money into " + account); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         account.deposit(amount); | ||||
|         System.out.println(client + " has deposited " + amount + " on " + account + ". New balance is " + account.getBalance()); | ||||
|     } | ||||
|  | ||||
|     public void withdraw(String client, Account account, int amount) { | ||||
|         if (amount < 0) { | ||||
|             System.out.println("Cannot withdraw a negative amount"); | ||||
|             return; | ||||
|         } | ||||
|         if (isBlacklisted(client)) { | ||||
|             System.out.println(client + " is on a blacklist and does not have the right to WITHDRAW money from " + account); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         if (!account.getOwner().equals(client)) { | ||||
|             System.out.println(client + " cannot WITHDRAW money from " + account + " because they are not the owner"); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         if (account.getBalance() < amount) { | ||||
|             System.out.println(client + " cannot WITHDRAW money from " + account + " because there is not enough money on the account."); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|         account.withdraw(amount); | ||||
|         System.out.println(client + " has withdrawn " + amount + " from " + account + ". New balance is " + account.getBalance()); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										18
									
								
								src/lab13_proxy/ex2/Main.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/lab13_proxy/ex2/Main.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| package lab13_proxy.ex2; | ||||
|  | ||||
| public class Main { | ||||
|     public static void main(String[] args) { | ||||
|         Account account = new Account("Pascale", 16000); | ||||
|  | ||||
|         Bank bank = new Bank(); | ||||
|         bank.blacklist("Jean"); | ||||
|         bank.blacklist("Pierre"); | ||||
|  | ||||
|         bank.deposit("Marcel", account, 1000); | ||||
|         bank.deposit("Jean", account, 1000); | ||||
|         bank.withdraw("Marcel", account, 1000); | ||||
|         bank.withdraw("Pascale", account, 1000000); | ||||
|         bank.withdraw("Pascale", account, 1000); | ||||
|         bank.withdraw("Pierre", account, 1000); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										8
									
								
								src/lab14_strategy/ex1/AxeBehavior.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/lab14_strategy/ex1/AxeBehavior.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| package lab14_strategy.ex1; | ||||
|  | ||||
| public class AxeBehavior implements WeaponBehavior { | ||||
|     @Override | ||||
|     public String useWeapon() { | ||||
|         return "chops with an axe"; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										19
									
								
								src/lab14_strategy/ex1/Character.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/lab14_strategy/ex1/Character.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| package lab14_strategy.ex1; | ||||
|  | ||||
| public abstract class Character { | ||||
|     private WeaponBehavior weapon; | ||||
|  | ||||
|     public Character(WeaponBehavior weapon) { | ||||
|         this.weapon = weapon; | ||||
|     } | ||||
|  | ||||
|     public void setWeapon(WeaponBehavior weapon) { | ||||
|         this.weapon = weapon; | ||||
|     } | ||||
|  | ||||
|     public abstract String getName(); | ||||
|  | ||||
|     public void fight() { | ||||
|         System.out.println(getName() + " " + weapon.useWeapon()); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										25
									
								
								src/lab14_strategy/ex1/Game.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/lab14_strategy/ex1/Game.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| package lab14_strategy.ex1; | ||||
|  | ||||
| import lab14_strategy.ex1.characters.King; | ||||
| import lab14_strategy.ex1.characters.Knight; | ||||
| import lab14_strategy.ex1.characters.Troll; | ||||
| import lab14_strategy.ex1.characters.Queen; | ||||
| import lab14_strategy.ex1.weapons.BowAndArrowBehavior; | ||||
| import lab14_strategy.ex1.weapons.KnifeBehavior; | ||||
|  | ||||
| public class Game { | ||||
|     public static void main(String[] args) { | ||||
|         Character king = new King(new KnifeBehavior()); | ||||
|         Character queen = new Queen(new BowAndArrowBehavior()); | ||||
|         Character knight = new Knight(new SwordBehavior()); | ||||
|         Character troll = new Troll(new AxeBehavior()); | ||||
|  | ||||
|         king.fight(); | ||||
|         queen.fight(); | ||||
|         knight.fight(); | ||||
|         troll.fight(); | ||||
|  | ||||
|         king.setWeapon(new SwordBehavior()); | ||||
|         king.fight(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										8
									
								
								src/lab14_strategy/ex1/SwordBehavior.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/lab14_strategy/ex1/SwordBehavior.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| package lab14_strategy.ex1; | ||||
|  | ||||
| public class SwordBehavior implements WeaponBehavior { | ||||
|     @Override | ||||
|     public String useWeapon() { | ||||
|         return "swings a sword"; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										5
									
								
								src/lab14_strategy/ex1/WeaponBehavior.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/lab14_strategy/ex1/WeaponBehavior.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| package lab14_strategy.ex1; | ||||
|  | ||||
| public interface WeaponBehavior { | ||||
|     String useWeapon(); | ||||
| } | ||||
							
								
								
									
										15
									
								
								src/lab14_strategy/ex1/characters/King.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/lab14_strategy/ex1/characters/King.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| package lab14_strategy.ex1.characters; | ||||
|  | ||||
| import lab14_strategy.ex1.Character; | ||||
| import lab14_strategy.ex1.WeaponBehavior; | ||||
|  | ||||
| public class King extends Character { | ||||
|     public King(WeaponBehavior weapon) { | ||||
|         super(weapon); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String getName() { | ||||
|         return "King"; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										15
									
								
								src/lab14_strategy/ex1/characters/Knight.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/lab14_strategy/ex1/characters/Knight.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| package lab14_strategy.ex1.characters; | ||||
|  | ||||
| import lab14_strategy.ex1.Character; | ||||
| import lab14_strategy.ex1.WeaponBehavior; | ||||
|  | ||||
| public class Knight extends Character { | ||||
|     public Knight(WeaponBehavior weapon) { | ||||
|         super(weapon); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String getName() { | ||||
|         return "Knight"; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										15
									
								
								src/lab14_strategy/ex1/characters/Queen.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/lab14_strategy/ex1/characters/Queen.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| package lab14_strategy.ex1.characters; | ||||
|  | ||||
| import lab14_strategy.ex1.Character; | ||||
| import lab14_strategy.ex1.WeaponBehavior; | ||||
|  | ||||
| public class Queen extends Character { | ||||
|     public Queen(WeaponBehavior weapon) { | ||||
|         super(weapon); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String getName() { | ||||
|         return "Queen"; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										15
									
								
								src/lab14_strategy/ex1/characters/Troll.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/lab14_strategy/ex1/characters/Troll.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| package lab14_strategy.ex1.characters; | ||||
|  | ||||
| import lab14_strategy.ex1.Character; | ||||
| import lab14_strategy.ex1.WeaponBehavior; | ||||
|  | ||||
| public class Troll extends Character { | ||||
|     public Troll(WeaponBehavior weapon) { | ||||
|         super(weapon); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String getName() { | ||||
|         return "Troll"; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										10
									
								
								src/lab14_strategy/ex1/weapons/BowAndArrowBehavior.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/lab14_strategy/ex1/weapons/BowAndArrowBehavior.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| package lab14_strategy.ex1.weapons; | ||||
|  | ||||
| import lab14_strategy.ex1.WeaponBehavior; | ||||
|  | ||||
| public class BowAndArrowBehavior implements WeaponBehavior { | ||||
|     @Override | ||||
|     public String useWeapon() { | ||||
|         return "shoots an arrow with a bow"; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										10
									
								
								src/lab14_strategy/ex1/weapons/KnifeBehavior.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/lab14_strategy/ex1/weapons/KnifeBehavior.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| package lab14_strategy.ex1.weapons; | ||||
|  | ||||
| import lab14_strategy.ex1.WeaponBehavior; | ||||
|  | ||||
| public class KnifeBehavior implements WeaponBehavior { | ||||
|     @Override | ||||
|     public String useWeapon() { | ||||
|         return "cuts with a knife"; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										5
									
								
								src/lab14_strategy/ex2/SortAlgorithm.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/lab14_strategy/ex2/SortAlgorithm.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| package lab14_strategy.ex2; | ||||
|  | ||||
| public interface SortAlgorithm { | ||||
|     void sort(int[] vector); | ||||
| } | ||||
							
								
								
									
										21
									
								
								src/lab14_strategy/ex2/Sorter.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/lab14_strategy/ex2/Sorter.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| package lab14_strategy.ex2; | ||||
|  | ||||
| public class Sorter { | ||||
|     private SortAlgorithm algorithm; | ||||
|     public void sort(int[] vector) { | ||||
|         algorithm.sort(vector); | ||||
|     } | ||||
|  | ||||
|     public void setAlgorithm(SortAlgorithm algorithm) { | ||||
|         this.algorithm = algorithm; | ||||
|     } | ||||
|  | ||||
|     public void showVectorData(int[] vector) { | ||||
|         StringBuilder sb = new StringBuilder(); | ||||
|  | ||||
|         for (int j : vector) { | ||||
|             sb.append(j).append("\t"); | ||||
|         } | ||||
|         System.out.println(sb); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										35
									
								
								src/lab14_strategy/ex2/StrategySortLauncher.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								src/lab14_strategy/ex2/StrategySortLauncher.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| package lab14_strategy.ex2; | ||||
|  | ||||
| import lab14_strategy.ex2.algorithms.BubbleSort; | ||||
| import lab14_strategy.ex2.algorithms.InsertionSort; | ||||
| import lab14_strategy.ex2.algorithms.SelectionSort; | ||||
|  | ||||
| public class StrategySortLauncher { | ||||
|     public static void main(String[] args) { | ||||
|         StrategySortLauncher launcher = new StrategySortLauncher(); | ||||
|         launcher.test(); | ||||
|     } | ||||
|  | ||||
|     public void test() { | ||||
|         int[] tab1 = { 99, 11, 2, 33, 12, 1, 0, 99, 34, 35 }; | ||||
|         int[] tab2 = { 99, 11, 2, 33, 12, 1, 0, 99, 34, 35 }; | ||||
|         int[] tab3 = { 99, 11, 2, 33, 12, 1, 0, 99, 34, 35 }; | ||||
|  | ||||
|         Sorter sorter = new Sorter(); | ||||
|  | ||||
|         System.out.println("test bubble sort"); | ||||
|         sorter.setAlgorithm(new BubbleSort()); | ||||
|         sorter.sort(tab1); | ||||
|         sorter.showVectorData(tab1); | ||||
|  | ||||
|         System.out.println("test insert sort"); | ||||
|         sorter.setAlgorithm(new InsertionSort()); | ||||
|         sorter.sort(tab2); | ||||
|         sorter.showVectorData(tab2); | ||||
|  | ||||
|         System.out.println("test selection sort"); | ||||
|         sorter.setAlgorithm(new SelectionSort()); | ||||
|         sorter.sort(tab3); | ||||
|         sorter.showVectorData(tab3); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										23
									
								
								src/lab14_strategy/ex2/algorithms/BubbleSort.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								src/lab14_strategy/ex2/algorithms/BubbleSort.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| package lab14_strategy.ex2.algorithms; | ||||
|  | ||||
| import lab14_strategy.ex2.SortAlgorithm; | ||||
|  | ||||
| public class BubbleSort implements SortAlgorithm { | ||||
|     @Override | ||||
|     public void sort(int[] vector) { | ||||
|         int temp; | ||||
|         int nbrePermutation = -1; | ||||
|         int nbreIteration = 0; | ||||
|         while (nbrePermutation != 0) { | ||||
|             nbrePermutation = 0; | ||||
|             for (int i=0; i<vector.length - nbreIteration - 1; i++) { | ||||
|                 if (vector[i] > vector[i + 1]) { | ||||
|                     nbrePermutation++; | ||||
|                     temp = vector[i + 1]; | ||||
|                     vector[i + 1] = vector[i]; | ||||
|                     vector[i] = temp; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										22
									
								
								src/lab14_strategy/ex2/algorithms/InsertionSort.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/lab14_strategy/ex2/algorithms/InsertionSort.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package lab14_strategy.ex2.algorithms; | ||||
|  | ||||
| import lab14_strategy.ex2.SortAlgorithm; | ||||
|  | ||||
| public class InsertionSort implements SortAlgorithm { | ||||
|     @Override | ||||
|     public void sort(int[] vector) { | ||||
|         int temp; | ||||
|         for (int i=1; i<vector.length; i++) { | ||||
|             temp = vector[i]; | ||||
|             for (int j = i - 1; j >= 0; j--) { | ||||
|                 if (vector[j] > temp) { | ||||
|                     vector[j + 1] = vector[j]; | ||||
|                     vector[j] = temp; | ||||
|                 } else { | ||||
|                     vector[j + 1] = temp; | ||||
|                     break; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										22
									
								
								src/lab14_strategy/ex2/algorithms/SelectionSort.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/lab14_strategy/ex2/algorithms/SelectionSort.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package lab14_strategy.ex2.algorithms; | ||||
|  | ||||
| import lab14_strategy.ex2.SortAlgorithm; | ||||
|  | ||||
| public class SelectionSort implements SortAlgorithm { | ||||
|     @Override | ||||
|     public void sort(int[] vector) { | ||||
|         int temp, cursor = 0; | ||||
|         for (int i=0; i<vector.length; i++) { | ||||
|             temp = vector[i]; | ||||
|             cursor = i; | ||||
|             for (int j = i; j < vector.length; j++) { | ||||
|                 if (vector[j] < temp) { | ||||
|                     temp = vector[j]; | ||||
|                     cursor = j; | ||||
|                 } | ||||
|             } | ||||
|             vector[cursor] = vector[i]; | ||||
|             vector[i] = temp; | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										24
									
								
								src/lab15_observer/ex1/Main.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/lab15_observer/ex1/Main.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| package lab15_observer.ex1; | ||||
|  | ||||
| public class Main { | ||||
|     public static void main(String[] args) { | ||||
|         PatientMonitoring pm = new PatientMonitoring(1, 140, 85); | ||||
|  | ||||
|         MedicalEmployee jean = new MedicalEmployee("Jean", pm); | ||||
|         MedicalEmployee pauline = new MedicalEmployee("Pauline", pm); | ||||
|         MedicalEmployee matthieu = new MedicalEmployee("Matthieu", pm); | ||||
|         MedicalEmployee symeon = new MedicalEmployee("Symeon", pm); | ||||
|  | ||||
|         pm.setBloodPressure(110); | ||||
|         pm.setPosition(3); | ||||
|  | ||||
|         pm.setPulseOximetry(90); | ||||
|         pm.setPulseOximetry(70); | ||||
|         pm.setPosition(7); | ||||
|         pm.setBloodPressure(150); | ||||
|  | ||||
|         pm.removeObserver(matthieu); | ||||
|         pm.setBloodPressure(145); | ||||
|         pm.setPosition(9); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										19
									
								
								src/lab15_observer/ex1/MedicalEmployee.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/lab15_observer/ex1/MedicalEmployee.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| package lab15_observer.ex1; | ||||
|  | ||||
| public class MedicalEmployee implements PatientObserver { | ||||
|     private final String name; | ||||
|  | ||||
|     public MedicalEmployee(String name, PatientMonitoring pm) { | ||||
|         this.name = name; | ||||
|         pm.registerObserver(this); | ||||
|     } | ||||
|  | ||||
|     public String getName() { | ||||
|         return name; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void update(Problem problem, PatientMonitoring pm) { | ||||
|         System.out.println(getName() + " has been notified of " + problem + " for patient " + pm); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										70
									
								
								src/lab15_observer/ex1/PatientMonitoring.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								src/lab15_observer/ex1/PatientMonitoring.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,70 @@ | ||||
| package lab15_observer.ex1; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
|  | ||||
| public class PatientMonitoring { | ||||
|     private final List<PatientObserver> observers = new ArrayList<>(); | ||||
|  | ||||
|     private int position; | ||||
|     private int bloodPressure; | ||||
|     private int pulseOximetry; | ||||
|  | ||||
|     public PatientMonitoring(int position, int bloodPressure, int pulseOximetry) { | ||||
|         this.position = position; | ||||
|         this.bloodPressure = bloodPressure; | ||||
|         this.pulseOximetry = pulseOximetry; | ||||
|     } | ||||
|  | ||||
|     public void registerObserver(PatientObserver o) { | ||||
|         observers.add(o); | ||||
|     } | ||||
|  | ||||
|     public void removeObserver(PatientObserver o) { | ||||
|         observers.remove(o); | ||||
|     } | ||||
|  | ||||
|     private void notifyObservers(Problem problem) { | ||||
|         for (PatientObserver o : observers) { | ||||
|             o.update(problem, this); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public int getPosition() { | ||||
|         return position; | ||||
|     } | ||||
|     public int getBloodPressure() { | ||||
|         return bloodPressure; | ||||
|     } | ||||
|     public int getPulseOximetry() { | ||||
|         return pulseOximetry; | ||||
|     } | ||||
|  | ||||
|     public void setPosition(int position) { | ||||
|         this.position = position; | ||||
|         notifyObservers(Problem.NO_PROBLEM); | ||||
|     } | ||||
|  | ||||
|     public void setBloodPressure(int bloodPressure) { | ||||
|         this.bloodPressure = bloodPressure; | ||||
|         if (getBloodPressure() > 145) { | ||||
|             notifyObservers(Problem.BLOOD_PRESSURE); | ||||
|         } else { | ||||
|             notifyObservers(Problem.NO_PROBLEM); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void setPulseOximetry(int pulseOximetry) { | ||||
|         this.pulseOximetry = pulseOximetry; | ||||
|         if (getPulseOximetry() > 85) { | ||||
|             notifyObservers(Problem.OXIMETRY); | ||||
|         } else { | ||||
|             notifyObservers(Problem.NO_PROBLEM); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String toString() { | ||||
|         return "<Patient Position: " + position + ", BP: " + bloodPressure + ", PO: " + pulseOximetry + ">"; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										5
									
								
								src/lab15_observer/ex1/PatientObserver.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/lab15_observer/ex1/PatientObserver.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| package lab15_observer.ex1; | ||||
|  | ||||
| public interface PatientObserver { | ||||
|     void update(Problem problem, PatientMonitoring pm); | ||||
| } | ||||
							
								
								
									
										7
									
								
								src/lab15_observer/ex1/Problem.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/lab15_observer/ex1/Problem.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| package lab15_observer.ex1; | ||||
|  | ||||
| public enum Problem { | ||||
|     NO_PROBLEM, | ||||
|     BLOOD_PRESSURE, | ||||
|     OXIMETRY | ||||
| } | ||||
							
								
								
									
										103
									
								
								src/lab15_observer/ex2/AnalogTimer.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								src/lab15_observer/ex2/AnalogTimer.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,103 @@ | ||||
| package lab15_observer.ex2; | ||||
|  | ||||
| public class AnalogTimer implements TimerObserver { | ||||
|     private final MyTimer timer; | ||||
|     private static final String[][] digits = { | ||||
|         { | ||||
|             "┌─┐", | ||||
|             "│ │", | ||||
|             "└─┘" | ||||
|         }, | ||||
|         { | ||||
|             "  ╷", | ||||
|             "  │", | ||||
|             "  ╵" | ||||
|         }, | ||||
|         { | ||||
|             "╶─┐", | ||||
|             "┌─┘", | ||||
|             "└─╴" | ||||
|         }, | ||||
|         { | ||||
|             "╶─┐", | ||||
|             " ─┤", | ||||
|             "╶─┘" | ||||
|         }, | ||||
|         { | ||||
|             "╷ ╷", | ||||
|             "└─┤", | ||||
|             "  ╵" | ||||
|         }, | ||||
|         { | ||||
|             "┌─╴", | ||||
|             "└─┐", | ||||
|             "╶─┘" | ||||
|         }, | ||||
|         { | ||||
|             "┌─╴", | ||||
|             "├─┐", | ||||
|             "└─┘" | ||||
|         }, | ||||
|         { | ||||
|             "╶─┐", | ||||
|             "  │", | ||||
|             "  ╵" | ||||
|         }, | ||||
|         { | ||||
|             "┌─┐", | ||||
|             "├─┤", | ||||
|             "└─┘" | ||||
|         }, | ||||
|         { | ||||
|             "┌─┐", | ||||
|             "└─┤", | ||||
|             "╶─┘" | ||||
|         }, | ||||
|     }; | ||||
|  | ||||
|     public AnalogTimer(MyTimer timer) { | ||||
|         this.timer = timer; | ||||
|         timer.registerObserver(this); | ||||
|     } | ||||
|  | ||||
|     public void update(int hours, int minutes, int seconds) { | ||||
|         String[] lines = {"", "", ""}; | ||||
|  | ||||
|         addDigit(lines, hours / 10); | ||||
|         addSpace(lines); | ||||
|         addDigit(lines, hours % 10); | ||||
|  | ||||
|         addSep(lines); | ||||
|  | ||||
|         addDigit(lines, minutes / 10); | ||||
|         addSpace(lines); | ||||
|         addDigit(lines, minutes % 10); | ||||
|  | ||||
|         addSep(lines); | ||||
|  | ||||
|         addDigit(lines, seconds / 10); | ||||
|         addSpace(lines); | ||||
|         addDigit(lines, seconds % 10); | ||||
|  | ||||
|         System.out.println(lines[0]); | ||||
|         System.out.println(lines[1]); | ||||
|         System.out.println(lines[2]); | ||||
|     } | ||||
|  | ||||
|     private void addDigit(String[] lines, int digit) { | ||||
|         String[] parts = digits[digit]; | ||||
|         for (int i = 0; i < 3; i++) { | ||||
|             lines[i] += parts[i]; | ||||
|         } | ||||
|     } | ||||
|     private void addSpace(String[] lines) { | ||||
|         lines[0] += " "; | ||||
|         lines[1] += " "; | ||||
|         lines[2] += " "; | ||||
|     } | ||||
|     private void addSep(String[] lines) { | ||||
|         lines[0] += " o "; | ||||
|         lines[1] += "   "; | ||||
|         lines[2] += " o "; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										8
									
								
								src/lab15_observer/ex2/ClockTimer.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/lab15_observer/ex2/ClockTimer.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| package lab15_observer.ex2; | ||||
|  | ||||
| public interface ClockTimer { | ||||
|     int getHour(); | ||||
|     int getMinute(); | ||||
|     int getSecond(); | ||||
|     void tick(); | ||||
| } | ||||
							
								
								
									
										15
									
								
								src/lab15_observer/ex2/DigitalTimer.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/lab15_observer/ex2/DigitalTimer.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| package lab15_observer.ex2; | ||||
|  | ||||
| public class DigitalTimer implements TimerObserver { | ||||
|     private final MyTimer timer; | ||||
|  | ||||
|     public DigitalTimer(MyTimer timer) { | ||||
|         this.timer = timer; | ||||
|         timer.registerObserver(this); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void update(int hours, int minutes, int seconds) { | ||||
|         System.out.printf("Time: %02d:%02d:%02d%n", hours, minutes, seconds); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										10
									
								
								src/lab15_observer/ex2/Main.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/lab15_observer/ex2/Main.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| package lab15_observer.ex2; | ||||
|  | ||||
| public class Main { | ||||
|     public static void main(String[] args) { | ||||
|         MyTimer clockTimer = new MyTimer(); | ||||
|  | ||||
|         new AnalogTimer(clockTimer); | ||||
|         new DigitalTimer(clockTimer); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										53
									
								
								src/lab15_observer/ex2/MyTimer.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								src/lab15_observer/ex2/MyTimer.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| package lab15_observer.ex2; | ||||
|  | ||||
| import java.util.*; | ||||
|  | ||||
| public class MyTimer implements ClockTimer { | ||||
|     private final List<TimerObserver> observers = new ArrayList<>(); | ||||
|     private Calendar cal; | ||||
|     private Timer timer; | ||||
|  | ||||
|     public MyTimer() { | ||||
|         cal = Calendar.getInstance(); | ||||
|         timer = new Timer(); | ||||
|         timer.schedule(new TimerAction(), 0, 1000); | ||||
|     } | ||||
|  | ||||
|     class TimerAction extends TimerTask { | ||||
|         @Override | ||||
|         public void run() { | ||||
|             cal = Calendar.getInstance(); | ||||
|             tick(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int getHour() { | ||||
|         return cal.get(Calendar.HOUR_OF_DAY); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int getMinute() { | ||||
|         return cal.get(Calendar.MINUTE); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int getSecond() { | ||||
|         return cal.get(Calendar.SECOND); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void tick() { | ||||
|         for (TimerObserver o : observers) { | ||||
|             o.update(getHour(), getMinute(), getSecond()); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void registerObserver(TimerObserver o) { | ||||
|         observers.add(o); | ||||
|     } | ||||
|  | ||||
|     public void removeObserver(TimerObserver o) { | ||||
|         observers.remove(o); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										5
									
								
								src/lab15_observer/ex2/TimerObserver.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/lab15_observer/ex2/TimerObserver.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| package lab15_observer.ex2; | ||||
|  | ||||
| public interface TimerObserver{ | ||||
|     void update(int hours, int minutes, int seconds); | ||||
| } | ||||
							
								
								
									
										8
									
								
								src/lab16_composite/ex1/Entity.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/lab16_composite/ex1/Entity.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| package lab16_composite.ex1; | ||||
|  | ||||
| public interface Entity { | ||||
|     void cry(); | ||||
|     void simulateInjury(); | ||||
|     void enterField(); | ||||
|     void shoot(); | ||||
| } | ||||
							
								
								
									
										33
									
								
								src/lab16_composite/ex1/Game.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/lab16_composite/ex1/Game.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| package lab16_composite.ex1; | ||||
|  | ||||
| public class Game { | ||||
|     public static void main(String[] args) { | ||||
|         Player jo = new Player(1); | ||||
|         Player jean = new Player(2); | ||||
|         Player paul = new Player(3); | ||||
|         jo.cry(); | ||||
|         jean.cry(); | ||||
|         jo.enterField(); | ||||
|         Team team1 = new Team(); | ||||
|         team1.add(jo); | ||||
|         team1.add(jean); | ||||
|         team1.add(paul); | ||||
|         team1.enterField(); | ||||
|         team1.cry(); | ||||
|         team1.simulateInjury(); | ||||
|         Player martine = new Player(3); | ||||
|         Player isabelle = new Player(4); | ||||
|         Player mariePaule = new Player(5); | ||||
|  | ||||
|         Team team2 = new Team(); | ||||
|         team2.add(martine); | ||||
|         team2.add(isabelle); | ||||
|         team2.add(mariePaule); | ||||
|         team2.add(team1); | ||||
|         team2.enterField(); | ||||
|         team2.cry(); | ||||
|         team2.simulateInjury(); | ||||
|         team2.remove(team1); | ||||
|         team2.simulateInjury(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										30
									
								
								src/lab16_composite/ex1/Player.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/lab16_composite/ex1/Player.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| package lab16_composite.ex1; | ||||
|  | ||||
| public class Player implements Entity { | ||||
|     private int number; | ||||
|  | ||||
|     public Player(int number) { | ||||
|         this.number = number; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String toString() { | ||||
|         return "[Player " + number + "]"; | ||||
|     } | ||||
|  | ||||
|     public void cry() { | ||||
|         System.out.println(this + " ouin ouin"); | ||||
|     } | ||||
|  | ||||
|     public void enterField() { | ||||
|         System.out.println(this + " let's go !"); | ||||
|     } | ||||
|  | ||||
|     public void simulateInjury() { | ||||
|         System.out.println(this + " ouch !"); | ||||
|     } | ||||
|  | ||||
|     public void shoot() { | ||||
|         System.out.println(this + " encara Messi..."); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										44
									
								
								src/lab16_composite/ex1/Team.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								src/lab16_composite/ex1/Team.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | ||||
| package lab16_composite.ex1; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
|  | ||||
| public class Team implements Entity { | ||||
|     private List<Entity> entities = new ArrayList<>(); | ||||
|  | ||||
|     public void add(Entity entity) { | ||||
|         entities.add(entity); | ||||
|     } | ||||
|  | ||||
|     public void remove(Entity entity) { | ||||
|         entities.remove(entity); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void cry() { | ||||
|         for (Entity entity : entities) { | ||||
|             entity.cry(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void simulateInjury() { | ||||
|         for (Entity entity : entities) { | ||||
|             entity.simulateInjury(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void enterField() { | ||||
|         for (Entity entity : entities) { | ||||
|             entity.enterField(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void shoot() { | ||||
|         for (Entity entity : entities) { | ||||
|             entity.shoot(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										74
									
								
								src/lab16_composite/ex3/TestTraversalAlgorithms.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								src/lab16_composite/ex3/TestTraversalAlgorithms.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,74 @@ | ||||
| package lab16_composite.ex3; | ||||
|  | ||||
| import lab16_composite.ex3.algorithm.BFSSearch; | ||||
| import lab16_composite.ex3.algorithm.DFSSearch; | ||||
| import lab16_composite.ex3.algorithm.TraversalAlgorithm; | ||||
| import lab16_composite.ex3.component.Component; | ||||
| import lab16_composite.ex3.composite.Composite; | ||||
| import lab16_composite.ex3.leaf.Leaf; | ||||
|  | ||||
| public class TestTraversalAlgorithms { | ||||
|     public static void main(String[] args) { | ||||
|         TestTraversalAlgorithms launcher = new TestTraversalAlgorithms(); | ||||
|         launcher.launch(); | ||||
|     } | ||||
|  | ||||
|     public void launch() { | ||||
|  | ||||
|         Component treeRoot = this.createTreeStruct(); | ||||
|  | ||||
|         //Instanciating one searchAlgoritm of each type. | ||||
|         TraversalAlgorithm dfs = new DFSSearch(); | ||||
|         TraversalAlgorithm bfs = new BFSSearch(); | ||||
|  | ||||
|         //Launching DFS search for one existing element. | ||||
|         Component result = dfs.search(treeRoot, "Leaf 5"); | ||||
|         System.out.println("1 element found by DFS: " + result); | ||||
|  | ||||
|         //Launching BFS search for one existing element. | ||||
|         result = bfs.search(treeRoot, "Leaf 5"); | ||||
|         System.out.println("1 element found by BFS : " + result); | ||||
|     } | ||||
|  | ||||
|     //1. We create the tree. | ||||
|     //         node1 | ||||
|     //         /    \ | ||||
|     //		node2	node3 | ||||
|     //		/  \	/   \ | ||||
|     //	   l1  n4  n5   n6 | ||||
|     //		   /\   \   / \ | ||||
|     //       l2 l3  l4 l5 l6 | ||||
|     // | ||||
|     //Creating the leafs. | ||||
|     private Component createTreeStruct() { | ||||
|         Leaf l1 = new Leaf("Leaf 1"); | ||||
|         Leaf l2 = new Leaf("Leaf 2"); | ||||
|         Leaf l3 = new Leaf("Leaf 3"); | ||||
|         Leaf l4 = new Leaf("Leaf 4"); | ||||
|         Leaf l5 = new Leaf("Leaf 5"); | ||||
|         Leaf l6 = new Leaf("Leaf 6"); | ||||
|  | ||||
|         //Creating the nodes | ||||
|         Composite n1 = new Composite("Node 1"); | ||||
|         Composite n2 = new Composite("Node 2"); | ||||
|         Composite n3 = new Composite("Node 3"); | ||||
|         Composite n4 = new Composite("Node 4"); | ||||
|         Composite n5 = new Composite("Node 5"); | ||||
|         Composite n6 = new Composite("Node 6"); | ||||
|  | ||||
|         //Assigning leaf and nodes to parents (nodes). | ||||
|         n6.add(l5); | ||||
|         n6.add(l6); | ||||
|         n5.add(l4); | ||||
|         n4.add(l2); | ||||
|         n4.add(l3); | ||||
|         n3.add(n5); | ||||
|         n3.add(n6); | ||||
|         n2.add(l1); | ||||
|         n2.add(n4); | ||||
|         n1.add(n2); | ||||
|         n1.add(n3); | ||||
|  | ||||
|         return n1; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										13
									
								
								src/lab16_composite/ex3/algorithm/BFSSearch.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/lab16_composite/ex3/algorithm/BFSSearch.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| package lab16_composite.ex3.algorithm; | ||||
|  | ||||
| import lab16_composite.ex3.component.Component; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
|  | ||||
| public class BFSSearch extends TraversalAlgorithm { | ||||
|  | ||||
|     @Override | ||||
|     protected void addSuccessor(ArrayList<Component> newSuccessors) { | ||||
|         successors.addAll(newSuccessors); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										12
									
								
								src/lab16_composite/ex3/algorithm/DFSSearch.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/lab16_composite/ex3/algorithm/DFSSearch.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| package lab16_composite.ex3.algorithm; | ||||
|  | ||||
| import lab16_composite.ex3.component.Component; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
|  | ||||
| public class DFSSearch extends TraversalAlgorithm { | ||||
|     @Override | ||||
|     protected void addSuccessor(ArrayList<Component> newSuccessors) { | ||||
|         successors.addAll(0, newSuccessors); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										27
									
								
								src/lab16_composite/ex3/algorithm/TraversalAlgorithm.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/lab16_composite/ex3/algorithm/TraversalAlgorithm.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| package lab16_composite.ex3.algorithm; | ||||
|  | ||||
| import lab16_composite.ex3.component.Component; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
|  | ||||
| public abstract class TraversalAlgorithm { | ||||
|     protected List<Component> successors = new ArrayList<>(); | ||||
|  | ||||
|     public Component search(Component root, String target) { | ||||
|         successors = new ArrayList<>(); | ||||
|         successors.add(root); | ||||
|         while (true) { | ||||
|             if (successors.isEmpty()) { | ||||
|                 return null; | ||||
|             } | ||||
|             Component component = successors.removeFirst(); | ||||
|             if (component.getName().equals(target)) { | ||||
|                 return component; | ||||
|             } | ||||
|             addSuccessor(component.getChildren()); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     protected abstract void addSuccessor(ArrayList<Component> newSuccessors); | ||||
| } | ||||
							
								
								
									
										23
									
								
								src/lab16_composite/ex3/component/Component.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								src/lab16_composite/ex3/component/Component.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| package lab16_composite.ex3.component; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
|  | ||||
| public abstract class Component { | ||||
|     public abstract String getName(); | ||||
|  | ||||
|     public void add(Component c) { | ||||
|         throw new UnsupportedOperationException(); | ||||
|     } | ||||
|  | ||||
|     public void remove(Component c) { | ||||
|         throw new UnsupportedOperationException(); | ||||
|     } | ||||
|  | ||||
|     public Component getChild(int i) { | ||||
|         throw new UnsupportedOperationException(); | ||||
|     } | ||||
|  | ||||
|     public ArrayList<Component> getChildren() { | ||||
|         throw new UnsupportedOperationException(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										52
									
								
								src/lab16_composite/ex3/composite/Composite.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								src/lab16_composite/ex3/composite/Composite.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | ||||
| package lab16_composite.ex3.composite; | ||||
|  | ||||
| import lab16_composite.ex3.component.Component; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
|  | ||||
| public class Composite extends Component { | ||||
|     private String name; | ||||
|     private final ArrayList<Component> children; | ||||
|  | ||||
|     public Composite(String n) { | ||||
|         name = n; | ||||
|         children = new ArrayList<Component>(); | ||||
|     } | ||||
|  | ||||
|     public void setName(String n) { | ||||
|         name = n; | ||||
|     } | ||||
|  | ||||
|     public String getName() { | ||||
|         return name; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void add(Component c) { | ||||
|         children.add(c); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void remove(Component c) { | ||||
|         children.remove(c); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Component getChild(int i) { | ||||
|         return children.get(i); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public ArrayList<Component> getChildren() { | ||||
|         return children; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String toString() { | ||||
|         String temp = "Composite " + name; | ||||
|         for (Component n : this.children) { | ||||
|             temp = temp + n.toString(); | ||||
|         } | ||||
|         return temp; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										30
									
								
								src/lab16_composite/ex3/leaf/Leaf.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								src/lab16_composite/ex3/leaf/Leaf.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| package lab16_composite.ex3.leaf; | ||||
|  | ||||
| import lab16_composite.ex3.component.Component; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
|  | ||||
| public class Leaf extends Component { | ||||
|     //Attributes | ||||
|  | ||||
|     private final String name; | ||||
|  | ||||
|     //Constructor | ||||
|     public Leaf(String n) { | ||||
|         name = n; | ||||
|     } | ||||
|  | ||||
|     public String getName() { | ||||
|         return name; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String toString() { | ||||
|         return "Leaf " + name; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public ArrayList<Component> getChildren() { | ||||
|         return new ArrayList<Component>(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										13
									
								
								src/lab5_adapter/ex1/Engineer.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/lab5_adapter/ex1/Engineer.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| package lab5_adapter.ex1; | ||||
|  | ||||
| public class Engineer { | ||||
|     private String name; | ||||
|     public Engineer(String name) { | ||||
|         this.name = name; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String toString() { | ||||
|         return "Engineer " + name; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										10
									
								
								src/lab5_adapter/ex1/Machine.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/lab5_adapter/ex1/Machine.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| package lab5_adapter.ex1; | ||||
|  | ||||
| public interface Machine { | ||||
|     int getNumberOfCapsules(); | ||||
|     boolean isCompletelyUp(); | ||||
|     void stop(); | ||||
|  | ||||
|     void setNumberOfCapsules(int capsules); | ||||
|     void setCompletelyUp(boolean completelyUp); | ||||
| } | ||||
							
								
								
									
										44
									
								
								src/lab5_adapter/ex1/MachineAdapter.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								src/lab5_adapter/ex1/MachineAdapter.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | ||||
| package lab5_adapter.ex1; | ||||
|  | ||||
| public class MachineAdapter implements NewMachineInterface { | ||||
|     private OldMachine machine; | ||||
|  | ||||
|     public MachineAdapter(OldMachine machine) { | ||||
|         this.machine = machine; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int getNumberOfCapsules() { | ||||
|         return machine.getNumberOfCapsules(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean isCompletelyUp() { | ||||
|         return machine.isCompletelyUp(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void stop() { | ||||
|         machine.stop(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setNumberOfCapsules(int capsules) { | ||||
|         machine.setNumberOfCapsules(capsules); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void setCompletelyUp(boolean completelyUp) { | ||||
|         machine.setCompletelyUp(completelyUp); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public Engineer getEngineer() { | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String toString() { | ||||
|         return machine.toString() + ", supervised by engineer " + getEngineer(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										27
									
								
								src/lab5_adapter/ex1/Main.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/lab5_adapter/ex1/Main.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| package lab5_adapter.ex1; | ||||
|  | ||||
| public class Main { | ||||
|     public static void main(String[] args) { | ||||
|         Engineer engineer1 = new Engineer("Jean"); | ||||
|         Engineer engineer2 = new Engineer("Maria"); | ||||
|         Machine machine1 = new NewMachine("1159190947", engineer1); | ||||
|         Machine machine2 = new NewMachine("1247233941", engineer1); | ||||
|         Machine machine3 = new NewMachine("258952499", engineer2); | ||||
|         OldMachine oldMachine = new OldMachine("603742814"); | ||||
|         Machine machine4 = new MachineAdapter(oldMachine); | ||||
|  | ||||
|         machine1.setNumberOfCapsules(30); | ||||
|         machine2.setNumberOfCapsules(20); | ||||
|         machine3.setNumberOfCapsules(40); | ||||
|         oldMachine.setNumberOfCapsules(80); | ||||
|         //Machine 1159190947 is currently processing 30 capsules, supervised by engineer Engineer Jean | ||||
|         //Machine 1247233941 is currently processing 20 capsules, supervised by engineer Engineer Jean | ||||
|         //Machine 258952499 is currently processing 40 capsules, supervised by engineer Engineer Maria | ||||
|         //Machine 603742814 is currently processing 80 capsules, supervised by engineer null | ||||
|  | ||||
|         System.out.println(machine1); | ||||
|         System.out.println(machine2); | ||||
|         System.out.println(machine3); | ||||
|         System.out.println(machine4); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										19
									
								
								src/lab5_adapter/ex1/NewMachine.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/lab5_adapter/ex1/NewMachine.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| package lab5_adapter.ex1; | ||||
|  | ||||
| public class NewMachine extends OldMachine implements NewMachineInterface { | ||||
|     private Engineer engineer; | ||||
|  | ||||
|     public NewMachine(String name, Engineer engineer) { | ||||
|         super(name); | ||||
|         this.engineer = engineer; | ||||
|     } | ||||
|  | ||||
|     public Engineer getEngineer() { | ||||
|         return engineer; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String toString() { | ||||
|         return super.toString() + ", supervised by engineer " + getEngineer(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										5
									
								
								src/lab5_adapter/ex1/NewMachineInterface.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								src/lab5_adapter/ex1/NewMachineInterface.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| package lab5_adapter.ex1; | ||||
|  | ||||
| public interface NewMachineInterface extends Machine { | ||||
|     Engineer getEngineer(); | ||||
| } | ||||
							
								
								
									
										39
									
								
								src/lab5_adapter/ex1/OldMachine.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								src/lab5_adapter/ex1/OldMachine.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| package lab5_adapter.ex1; | ||||
|  | ||||
| public class OldMachine implements Machine { | ||||
|     private String name; | ||||
|     private int capsules = 0; | ||||
|     private boolean completelyUp = false; | ||||
|  | ||||
|     public OldMachine(String name) { | ||||
|         this.name = name; | ||||
|     } | ||||
|  | ||||
|     public void setNumberOfCapsules(int capsules) { | ||||
|         this.capsules = capsules; | ||||
|     } | ||||
|  | ||||
|     public void setCompletelyUp(boolean completelyUp) { | ||||
|         this.completelyUp = completelyUp; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int getNumberOfCapsules() { | ||||
|         return capsules; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean isCompletelyUp() { | ||||
|         return completelyUp; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void stop() { | ||||
|         System.out.println("Stopping machine " + name); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String toString() { | ||||
|         return "Machine " + name + " is currently processing " + getNumberOfCapsules() + " capsules"; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										32
									
								
								src/lab6_template_method/ex1/HellsKitchen.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/lab6_template_method/ex1/HellsKitchen.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| package lab6_template_method.ex1; | ||||
|  | ||||
| public class HellsKitchen extends Restaurant { | ||||
|     public HellsKitchen(String name) { | ||||
|         super("HK " + name); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void prepareVegetables() { | ||||
|         log("Preparing nice salad"); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void prepareMainMenu() { | ||||
|         log("Creating flavorful dish"); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void prepareCheese() { | ||||
|         log("Preparing finest cheese"); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void prepareDessert() { | ||||
|         log("Giving birth to awesome dessert"); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void prepareCoffee() { | ||||
|         log("Brewing the best coffee"); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										32
									
								
								src/lab6_template_method/ex1/MacDonalds.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/lab6_template_method/ex1/MacDonalds.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| package lab6_template_method.ex1; | ||||
|  | ||||
| public class MacDonalds extends Restaurant { | ||||
|     public MacDonalds(String name) { | ||||
|         super("McDonalds " + name); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void prepareVegetables() { | ||||
|         log("Vegetables ? What's that ?"); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void prepareMainMenu() { | ||||
|         log("McChicken incoming"); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void prepareCheese() { | ||||
|         log("Hmmm, creamy cheese"); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void prepareDessert() { | ||||
|         log("Preparing McFlurry"); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void prepareCoffee() { | ||||
|         log("Preparing short and hot coffee"); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										11
									
								
								src/lab6_template_method/ex1/Main.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/lab6_template_method/ex1/Main.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| package lab6_template_method.ex1; | ||||
|  | ||||
| public class Main { | ||||
|     public static void main(String[] args) { | ||||
|         Restaurant r1 = new MacDonalds("Sion"); | ||||
|         Restaurant r2 = new HellsKitchen("London"); | ||||
|  | ||||
|         r1.prepareDinner(); | ||||
|         r2.prepareDinner(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										36
									
								
								src/lab6_template_method/ex1/Restaurant.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								src/lab6_template_method/ex1/Restaurant.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| package lab6_template_method.ex1; | ||||
|  | ||||
| public abstract class Restaurant { | ||||
|     private String name; | ||||
|     public Restaurant(String name) { | ||||
|         this.name = name; | ||||
|     } | ||||
|  | ||||
|     public final void prepareDinner() { | ||||
|         serveWater(); | ||||
|         prepareVegetables(); | ||||
|         prepareMainMenu(); | ||||
|         prepareCheese(); | ||||
|         prepareDessert(); | ||||
|         prepareCoffee(); | ||||
|         cleanTable(); | ||||
|     } | ||||
|  | ||||
|     protected void log(String msg) { | ||||
|         System.out.println("[" + name + "] " + msg); | ||||
|     } | ||||
|  | ||||
|     protected final void serveWater() { | ||||
|         log("Serving water"); | ||||
|     } | ||||
|  | ||||
|     protected final void cleanTable() { | ||||
|         log("Cleaning table"); | ||||
|     } | ||||
|  | ||||
|     protected abstract void prepareVegetables(); | ||||
|     protected abstract void prepareMainMenu(); | ||||
|     protected abstract void prepareCheese(); | ||||
|     protected abstract void prepareDessert(); | ||||
|     protected abstract void prepareCoffee(); | ||||
| } | ||||
							
								
								
									
										101
									
								
								src/lab7_state/ex1/Machine.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								src/lab7_state/ex1/Machine.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,101 @@ | ||||
| package lab7_state.ex1; | ||||
|  | ||||
| import lab7_state.ex1.states.*; | ||||
|  | ||||
| public class Machine { | ||||
|     private MachineState currentState; | ||||
|     private final MachineState offState; | ||||
|     private final MachineState idleState; | ||||
|     private final MachineState choiceState; | ||||
|     private final MachineState serviceNeededState; | ||||
|     private final MachineState coffeeReadyState; | ||||
|  | ||||
|     private int cups; | ||||
|     private boolean jammed = false; | ||||
|  | ||||
|     public Machine() { | ||||
|         offState = new OffState(this); | ||||
|         idleState = new IdleState(this); | ||||
|         choiceState = new ChoiceState(this); | ||||
|         serviceNeededState = new ServiceNeededState(this); | ||||
|         coffeeReadyState = new CoffeeReadyState(this); | ||||
|         currentState = offState; | ||||
|         this.setCups(3); | ||||
|     } | ||||
|  | ||||
|     public MachineState getOffState() { | ||||
|         return offState; | ||||
|     } | ||||
|  | ||||
|     public MachineState getIdleState() { | ||||
|         return idleState; | ||||
|     } | ||||
|  | ||||
|     public MachineState getChoiceState() { | ||||
|         return choiceState; | ||||
|     } | ||||
|  | ||||
|     public MachineState getServiceNeededState() { | ||||
|         return serviceNeededState; | ||||
|     } | ||||
|  | ||||
|     public MachineState getCoffeeReadyState() { | ||||
|         return coffeeReadyState; | ||||
|     } | ||||
|  | ||||
|     public void returnMoney(double value) { | ||||
|         System.out.println("Returning CHF " + value); | ||||
|     } | ||||
|  | ||||
|     public void setCurrentState(MachineState currentState) { | ||||
|         System.out.println(this.currentState.toString() + " -> " + currentState); | ||||
|         this.currentState = currentState; | ||||
|     } | ||||
|  | ||||
|     public void powerUp() { | ||||
|         currentState.powerUp(); | ||||
|     } | ||||
|  | ||||
|     public void insertCoin(double value) { | ||||
|         currentState.insertCoin(value); | ||||
|     } | ||||
|  | ||||
|     public void returnCoin() { | ||||
|         currentState.returnCoin(); | ||||
|     } | ||||
|  | ||||
|     public void pushButton() { | ||||
|         currentState.pushButton(); | ||||
|     } | ||||
|  | ||||
|     public void resetButton() { | ||||
|         currentState.reset(); | ||||
|     } | ||||
|  | ||||
|     public void removeCup() { | ||||
|         currentState.removeCup(); | ||||
|     } | ||||
|  | ||||
|     public void setCups(int cups) { | ||||
|         this.cups = cups; | ||||
|     } | ||||
|  | ||||
|     public boolean hasCups() { | ||||
|         return cups != 0; | ||||
|     } | ||||
|  | ||||
|     public boolean hasCoffee() { | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     public boolean isJammed() { | ||||
|         return jammed; | ||||
|     } | ||||
|  | ||||
|     public void makeCoffee() { | ||||
|         cups--; | ||||
|         if (Math.random() < 0.2) { | ||||
|             jammed = true; | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										21
									
								
								src/lab7_state/ex1/MachineState.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/lab7_state/ex1/MachineState.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| package lab7_state.ex1; | ||||
|  | ||||
| public abstract class MachineState { | ||||
|     protected Machine machine; | ||||
|  | ||||
|     public MachineState(Machine machine) { | ||||
|         this.machine = machine; | ||||
|     } | ||||
|  | ||||
|     protected void powerUp() {} | ||||
|     protected void insertCoin(double value) {} | ||||
|     protected void returnCoin() {} | ||||
|     protected void reset() {} | ||||
|     protected void pushButton() {} | ||||
|     protected void removeCup() {} | ||||
|  | ||||
|     @Override | ||||
|     public String toString() { | ||||
|         return getClass().getSimpleName(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										29
									
								
								src/lab7_state/ex1/Main.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								src/lab7_state/ex1/Main.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| package lab7_state.ex1; | ||||
|  | ||||
| public class Main { | ||||
|     public static void main(String[] args) { | ||||
|         Machine machine = new Machine(); | ||||
|         System.out.println("A"); | ||||
|         machine.powerUp(); | ||||
|         machine.insertCoin(1); | ||||
|  | ||||
|         System.out.println("B"); | ||||
|         machine.insertCoin(0.25); | ||||
|         machine.returnCoin(); | ||||
|  | ||||
|         System.out.println("C"); | ||||
|         machine.insertCoin(0.25); | ||||
|         machine.pushButton(); | ||||
|         machine.removeCup(); | ||||
|  | ||||
|         for (int i = 0; i < 4; i++) { | ||||
|             System.out.println("D" + i); | ||||
|             machine.insertCoin(0.25); | ||||
|             machine.pushButton(); | ||||
|             machine.removeCup(); | ||||
|         } | ||||
|  | ||||
|         System.out.println("E"); | ||||
|         machine.resetButton(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										32
									
								
								src/lab7_state/ex1/states/ChoiceState.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/lab7_state/ex1/states/ChoiceState.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| package lab7_state.ex1.states; | ||||
|  | ||||
| import lab7_state.ex1.Machine; | ||||
| import lab7_state.ex1.MachineState; | ||||
|  | ||||
| public class ChoiceState extends MachineState { | ||||
|     public ChoiceState(Machine machine) { | ||||
|         super(machine); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void returnCoin() { | ||||
|         machine.returnMoney(0.25); | ||||
|         machine.setCurrentState(machine.getIdleState()); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void pushButton() { | ||||
|         if (!machine.hasCups()) { | ||||
|             System.out.println("The machine is out of cups"); | ||||
|         } else if (!machine.hasCoffee()) { | ||||
|             System.out.println("The machine is out of coffee beans"); | ||||
|         } else if (machine.isJammed()) { | ||||
|             System.out.println("The machine is jammed"); | ||||
|         } else { | ||||
|             machine.makeCoffee(); | ||||
|             machine.setCurrentState(machine.getCoffeeReadyState()); | ||||
|             return; | ||||
|         } | ||||
|         machine.setCurrentState(machine.getServiceNeededState()); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										15
									
								
								src/lab7_state/ex1/states/CoffeeReadyState.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/lab7_state/ex1/states/CoffeeReadyState.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| package lab7_state.ex1.states; | ||||
|  | ||||
| import lab7_state.ex1.Machine; | ||||
| import lab7_state.ex1.MachineState; | ||||
|  | ||||
| public class CoffeeReadyState extends MachineState { | ||||
|     public CoffeeReadyState(Machine machine) { | ||||
|         super(machine); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void removeCup() { | ||||
|         machine.setCurrentState(machine.getIdleState()); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										20
									
								
								src/lab7_state/ex1/states/IdleState.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/lab7_state/ex1/states/IdleState.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| package lab7_state.ex1.states; | ||||
|  | ||||
| import lab7_state.ex1.Machine; | ||||
| import lab7_state.ex1.MachineState; | ||||
|  | ||||
| public class IdleState extends MachineState { | ||||
|     public IdleState(Machine machine) { | ||||
|         super(machine); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void insertCoin(double value) { | ||||
|         if (value != 0.25) { | ||||
|             machine.returnMoney(value); | ||||
|         } else { | ||||
|             System.out.println("Please choose your coffee"); | ||||
|             machine.setCurrentState(machine.getChoiceState()); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										15
									
								
								src/lab7_state/ex1/states/OffState.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/lab7_state/ex1/states/OffState.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| package lab7_state.ex1.states; | ||||
|  | ||||
| import lab7_state.ex1.Machine; | ||||
| import lab7_state.ex1.MachineState; | ||||
|  | ||||
| public class OffState extends MachineState { | ||||
|     public OffState(Machine machine) { | ||||
|         super(machine); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void powerUp() { | ||||
|         machine.setCurrentState(machine.getIdleState()); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										15
									
								
								src/lab7_state/ex1/states/ServiceNeededState.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/lab7_state/ex1/states/ServiceNeededState.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| package lab7_state.ex1.states; | ||||
|  | ||||
| import lab7_state.ex1.Machine; | ||||
| import lab7_state.ex1.MachineState; | ||||
|  | ||||
| public class ServiceNeededState extends MachineState { | ||||
|     public ServiceNeededState(Machine machine) { | ||||
|         super(machine); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void reset() { | ||||
|         machine.setCurrentState(machine.getIdleState()); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										25
									
								
								src/lab7_state/ex2/Main.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/lab7_state/ex2/Main.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| package lab7_state.ex2; | ||||
|  | ||||
| public class Main { | ||||
|     public static void main(String[] args) { | ||||
|         User user = new User("Baryhobal"); | ||||
|         user.connect(); | ||||
|         user.enter(); | ||||
|         user.leave(); | ||||
|  | ||||
|         user.enter(); | ||||
|         user.ask(); | ||||
|         user.leave(); | ||||
|  | ||||
|         user.enter(); | ||||
|         user.ask(); | ||||
|         user.handOver(); | ||||
|         user.leave(); | ||||
|  | ||||
|         user.enter(); | ||||
|         user.ask(); | ||||
|         user.handOver(); | ||||
|         user.over(); | ||||
|         user.leave(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										71
									
								
								src/lab7_state/ex2/User.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								src/lab7_state/ex2/User.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,71 @@ | ||||
| package lab7_state.ex2; | ||||
|  | ||||
| import lab7_state.ex2.states.*; | ||||
|  | ||||
| public class User { | ||||
|     private final String name; | ||||
|     private UserState currentState; | ||||
|     private final UserState unregisteredState; | ||||
|     private final UserState registeredState; | ||||
|     private final UserState inMeetingState; | ||||
|     private final UserState waitingToSpeakState; | ||||
|     private final UserState speakingState; | ||||
|  | ||||
|     public User(String name) { | ||||
|         this.name = name; | ||||
|         unregisteredState = new UnregisteredState(this); | ||||
|         registeredState = new RegisteredState(this); | ||||
|         inMeetingState = new InMeetingState(this); | ||||
|         waitingToSpeakState = new WaitingToSpeakState(this); | ||||
|         speakingState = new SpeakingState(this); | ||||
|         currentState = unregisteredState; | ||||
|     } | ||||
|  | ||||
|     public void setCurrentState(UserState currentState) { | ||||
|         this.currentState = currentState; | ||||
|     } | ||||
|  | ||||
|     public UserState getUnregisteredState() { | ||||
|         return unregisteredState; | ||||
|     } | ||||
|  | ||||
|     public UserState getRegisteredState() { | ||||
|         return registeredState; | ||||
|     } | ||||
|  | ||||
|     public UserState getInMeetingState() { | ||||
|         return inMeetingState; | ||||
|     } | ||||
|  | ||||
|     public UserState getWaitingToSpeakState() { | ||||
|         return waitingToSpeakState; | ||||
|     } | ||||
|  | ||||
|     public UserState getSpeakingState() { | ||||
|         return speakingState; | ||||
|     } | ||||
|  | ||||
|     public void connect() { | ||||
|         currentState.connect(); | ||||
|     } | ||||
|     public void enter() { | ||||
|         currentState.enter(); | ||||
|     } | ||||
|     public void leave() { | ||||
|         currentState.leave(); | ||||
|     } | ||||
|     public void ask() { | ||||
|         currentState.ask(); | ||||
|     } | ||||
|     public void handOver() { | ||||
|         currentState.handOver(); | ||||
|     } | ||||
|     public void over() { | ||||
|         currentState.over(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String toString() { | ||||
|         return "User " + name; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										18
									
								
								src/lab7_state/ex2/UserState.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/lab7_state/ex2/UserState.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| package lab7_state.ex2; | ||||
|  | ||||
| public abstract class UserState { | ||||
|     protected User user; | ||||
|     public UserState(User user) { | ||||
|         this.user = user; | ||||
|     } | ||||
|     protected void log(String msg) { | ||||
|         System.out.println("[" + user + "] " + msg); | ||||
|     } | ||||
|  | ||||
|     public void connect() {}; | ||||
|     public void enter() {}; | ||||
|     public void leave() {}; | ||||
|     public void ask() {}; | ||||
|     public void handOver() {}; | ||||
|     public void over() {}; | ||||
| } | ||||
							
								
								
									
										22
									
								
								src/lab7_state/ex2/states/InMeetingState.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/lab7_state/ex2/states/InMeetingState.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package lab7_state.ex2.states; | ||||
|  | ||||
| import lab7_state.ex2.User; | ||||
| import lab7_state.ex2.UserState; | ||||
|  | ||||
| public class InMeetingState extends UserState { | ||||
|     public InMeetingState(User user) { | ||||
|         super(user); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void leave() { | ||||
|         user.setCurrentState(user.getRegisteredState()); | ||||
|         log("Left meeting"); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void ask() { | ||||
|         user.setCurrentState(user.getWaitingToSpeakState()); | ||||
|         log("Asking to speak"); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										16
									
								
								src/lab7_state/ex2/states/RegisteredState.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/lab7_state/ex2/states/RegisteredState.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| package lab7_state.ex2.states; | ||||
|  | ||||
| import lab7_state.ex2.User; | ||||
| import lab7_state.ex2.UserState; | ||||
|  | ||||
| public class RegisteredState extends UserState { | ||||
|     public RegisteredState(User user) { | ||||
|         super(user); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void enter() { | ||||
|         user.setCurrentState(user.getInMeetingState()); | ||||
|         log("Entered meeting"); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										22
									
								
								src/lab7_state/ex2/states/SpeakingState.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/lab7_state/ex2/states/SpeakingState.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package lab7_state.ex2.states; | ||||
|  | ||||
| import lab7_state.ex2.User; | ||||
| import lab7_state.ex2.UserState; | ||||
|  | ||||
| public class SpeakingState extends UserState { | ||||
|     public SpeakingState(User user) { | ||||
|         super(user); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void over() { | ||||
|         user.setCurrentState(user.getInMeetingState()); | ||||
|         log("Finished speaking"); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void leave() { | ||||
|         user.setCurrentState(user.getRegisteredState()); | ||||
|         log("Finished speaking, left meeting"); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										16
									
								
								src/lab7_state/ex2/states/UnregisteredState.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/lab7_state/ex2/states/UnregisteredState.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| package lab7_state.ex2.states; | ||||
|  | ||||
| import lab7_state.ex2.User; | ||||
| import lab7_state.ex2.UserState; | ||||
|  | ||||
| public class UnregisteredState extends UserState { | ||||
|     public UnregisteredState(User user) { | ||||
|         super(user); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void connect() { | ||||
|         user.setCurrentState(user.getRegisteredState()); | ||||
|         log("Registered"); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										22
									
								
								src/lab7_state/ex2/states/WaitingToSpeakState.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/lab7_state/ex2/states/WaitingToSpeakState.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package lab7_state.ex2.states; | ||||
|  | ||||
| import lab7_state.ex2.User; | ||||
| import lab7_state.ex2.UserState; | ||||
|  | ||||
| public class WaitingToSpeakState extends UserState { | ||||
|     public WaitingToSpeakState(User user) { | ||||
|         super(user); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void leave() { | ||||
|         user.setCurrentState(user.getRegisteredState()); | ||||
|         log("Lost patience, left meeting"); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void handOver() { | ||||
|         user.setCurrentState(user.getSpeakingState()); | ||||
|         log("Starts speaking"); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										70
									
								
								src/lab8_builder/ex1/Car.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								src/lab8_builder/ex1/Car.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,70 @@ | ||||
| package lab8_builder.ex1; | ||||
|  | ||||
| public class Car { | ||||
|     private String power; | ||||
|     private String engine; | ||||
|     private String breaks; | ||||
|     private String seats; | ||||
|     private String windows; | ||||
|     private String fuelType; | ||||
|     private final String carType; | ||||
|     public Car (String carType){ | ||||
|         this.carType = carType; | ||||
|     } | ||||
|     public String getPower() { | ||||
|         return power; | ||||
|     } | ||||
|     public void setPower(String power) { | ||||
|         this.power = power; | ||||
|     } | ||||
|     public String getEngine() { | ||||
|         return engine; | ||||
|     } | ||||
|     public void setEngine(String engine) { | ||||
|         this.engine = engine; | ||||
|     } | ||||
|     public String getBreaks() { | ||||
|         return breaks; | ||||
|     } | ||||
|     public void setBreaks(String breaks) { | ||||
|         this.breaks = breaks; | ||||
|     } | ||||
|     public String getSeats() { | ||||
|         return seats; | ||||
|     } | ||||
|     public void setSeats(String seats) { | ||||
|         this.seats = seats; | ||||
|     } | ||||
|     public String getWindows() { | ||||
|         return windows; | ||||
|     } | ||||
|     public void setWindows(String windows) { | ||||
|         this.windows = windows; | ||||
|     } | ||||
|     public String getFuelType() { | ||||
|         return fuelType; | ||||
|     } | ||||
|     public void setFuelType(String fuelType) { | ||||
|         this.fuelType = fuelType; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String toString() { | ||||
|         StringBuilder sb = new StringBuilder(); | ||||
|         sb.append("--------------"+carType+"--------------------- \n"); | ||||
|         sb.append("\n Power: "); | ||||
|         sb.append(power); | ||||
|         sb.append("\n Engine: "); | ||||
|         sb.append(engine); | ||||
|         sb.append("\n Breaks: "); | ||||
|         sb.append(breaks); | ||||
|         sb.append("\n Seats: "); | ||||
|         sb.append(seats); | ||||
|         sb.append("\n Windows: "); | ||||
|         sb.append(windows); | ||||
|         sb.append("\n Fuel Type: "); | ||||
|         sb.append(fuelType); | ||||
|  | ||||
|         return sb.toString(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										20
									
								
								src/lab8_builder/ex1/CarBuilder.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/lab8_builder/ex1/CarBuilder.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| package lab8_builder.ex1; | ||||
|  | ||||
| public abstract class CarBuilder { | ||||
|     protected Car car; | ||||
|  | ||||
|     protected abstract String getCarType(); | ||||
|  | ||||
|     public Car getCar() { | ||||
|         return car; | ||||
|     } | ||||
|  | ||||
|     public void setCar(Car car) { | ||||
|         this.car = car; | ||||
|     } | ||||
|  | ||||
|     public abstract void buildEngine(); | ||||
|     public abstract void buildBreaks(); | ||||
|     public abstract void buildSeats(); | ||||
|     public abstract void buildWindows(); | ||||
| } | ||||
							
								
								
									
										20
									
								
								src/lab8_builder/ex1/CarFactory.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/lab8_builder/ex1/CarFactory.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| package lab8_builder.ex1; | ||||
|  | ||||
| public class CarFactory { | ||||
|     private CarBuilder builder; | ||||
|     private Car car; | ||||
|  | ||||
|     public void setBuilder(CarBuilder builder) { | ||||
|         this.builder = builder; | ||||
|     } | ||||
|  | ||||
|     public Car construct() { | ||||
|         car = new Car(builder.getCarType()); | ||||
|         builder.setCar(car); | ||||
|         builder.buildEngine(); | ||||
|         builder.buildBreaks(); | ||||
|         builder.buildSeats(); | ||||
|         builder.buildWindows(); | ||||
|         return builder.getCar(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										22
									
								
								src/lab8_builder/ex1/Main.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/lab8_builder/ex1/Main.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package lab8_builder.ex1; | ||||
|  | ||||
| import lab8_builder.ex1.builders.BerlinBuilder; | ||||
| import lab8_builder.ex1.builders.SportBuilder; | ||||
|  | ||||
| public class Main { | ||||
|     public static void main(String[] args) { | ||||
|         CarFactory factory = new CarFactory(); | ||||
|  | ||||
|         CarBuilder builder1 = new BerlinBuilder(); | ||||
|         CarBuilder builder2 = new SportBuilder(); | ||||
|  | ||||
|         factory.setBuilder(builder1); | ||||
|         Car car1 = factory.construct(); | ||||
|  | ||||
|         factory.setBuilder(builder2); | ||||
|         Car car2 = factory.construct(); | ||||
|  | ||||
|         System.out.println(car1); | ||||
|         System.out.println(car2); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										32
									
								
								src/lab8_builder/ex1/builders/BerlinBuilder.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/lab8_builder/ex1/builders/BerlinBuilder.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| package lab8_builder.ex1.builders; | ||||
|  | ||||
| import lab8_builder.ex1.CarBuilder; | ||||
|  | ||||
| public class BerlinBuilder extends CarBuilder { | ||||
|     @Override | ||||
|     protected String getCarType() { | ||||
|         return "Berlin"; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void buildEngine() { | ||||
|         car.setEngine("V12"); | ||||
|         car.setFuelType("Diesel"); | ||||
|         car.setPower("12'000 Horses"); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void buildBreaks() { | ||||
|         car.setBreaks("Premium Double Tungsten-Platinum Alloy"); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void buildSeats() { | ||||
|         car.setSeats("5"); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void buildWindows() { | ||||
|         car.setWindows("Tinted bullet-proof"); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										32
									
								
								src/lab8_builder/ex1/builders/SportBuilder.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								src/lab8_builder/ex1/builders/SportBuilder.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| package lab8_builder.ex1.builders; | ||||
|  | ||||
| import lab8_builder.ex1.CarBuilder; | ||||
|  | ||||
| public class SportBuilder extends CarBuilder { | ||||
|     @Override | ||||
|     protected String getCarType() { | ||||
|         return "Sports"; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void buildEngine() { | ||||
|         car.setEngine("V8"); | ||||
|         car.setFuelType("Unleaded 95"); | ||||
|         car.setPower("7'000 horses"); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void buildBreaks() { | ||||
|         car.setBreaks("Holo-magnetic and semi-cyclonic"); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void buildSeats() { | ||||
|         car.setSeats("2"); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void buildWindows() { | ||||
|         car.setWindows("Standard"); | ||||
|     } | ||||
| } | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user