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