Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions _1_basics/src/main/java/code/_3_in_class/Salut.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package code._3_in_class;

public class Salut {
public static void main(String[] args) {
System.out.println("Salut");
}
}
51 changes: 51 additions & 0 deletions _2_oo/src/main/java/code/_3_in_class/BoxingFighter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package code._3_in_class;

import java.util.Random;

public class BoxingFighter {
private String name;
private int health;
private int minDamage;
private int maxDamage;

public BoxingFighter(String name, int health, int minDamage, int maxDamage) {
this.name = name;
this.health = health;
this.minDamage = minDamage;
this.maxDamage = maxDamage;
}

public void attack(BoxingFighter opponent) {
int damage = new Random().nextInt(maxDamage - minDamage + 1) + minDamage;
System.out.println(this.name + " attacks " + opponent.getName() + " and deals " + damage + " damage.");
opponent.receiveDamage(damage);
}

public void receiveDamage(int damage) {
this.health -= damage;
System.out.println(this.name + " receives " + damage + " damage.");
if (this.health <= 0) {
System.out.println(this.name + " has been knocked out!");
}
}

public void defend() {
System.out.println(this.name + " defends the opponent's attack.");
}

public String getName() {
return this.name;
}

public int getHealth() {
return this.health;
}

public int getMinDamage() {
return this.minDamage;
}

public int getMaxDamage() {
return this.maxDamage;
}
}
27 changes: 24 additions & 3 deletions _2_oo/src/main/java/code/_3_in_class/Main.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,29 @@
package code._3_in_class;

public class Main {

public class Main {
public static void main(String[] args) {
//TODO put your code changes in here
BoxingFighter student1 = new BoxingFighter("Luci", 100, 15, 25);
BoxingFighter student2 = new BoxingFighter("Roland", 120, 12, 20);

while (student1.getHealth() > 0 && student2.getHealth() > 0) {
student1.attack(student2);
if (student2.getHealth() <= 0) {
break;
}
student2.defend();

student2.attack(student1);
if (student1.getHealth() <= 0) {
break;
}
student1.defend();
}

if (student1.getHealth() > 0) {
System.out.println(student1.getName() + " wins!");
} else {
System.out.println(student2.getName() + " wins!");
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,170 @@
package clean.code.design_patterns.requirements;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

public class Main {
// Clasa de bază pentru persoane
class Person {
private String name;

public Person(String name) {
this.name = name;
}

public String getName() {
return name;
}
}

// Clasa elevului care moștenește clasa Person
class Student extends Person {
private List<String> grades;

public Student(String name) {
super(name);
grades = new ArrayList<>();
}

public void addGrade(String grade) {
grades.add(grade);
System.out.println("Notă nouă adăugată elevului " + getName() + ": " + grade);
}
}

// Clasa profesorului care moștenește clasa Person
class Teacher extends Person {
private SchoolCatalog catalog;
private Random random;

public Teacher(String name) {
super(name);
catalog = SchoolCatalog.getInstance();
random = new Random();
}

public void addGrade(String studentName) {
// Generăm o notă aleatorie între 1 și 10
String grade = String.valueOf(random.nextInt(10) + 1);
catalog.addGrade(studentName, grade);
}
}

// Clasa catalogului școlar care utilizează Singleton și Observer
class SchoolCatalog {
private static SchoolCatalog instance;
private List<Student> students;
private Map<Student, List<NotificationObserver>> observers;

// Constructor privat pentru a preveni crearea directă a instanței
private SchoolCatalog() {
students = new ArrayList<>();
observers = new HashMap<>();
}

// Metoda statică pentru a obține instanța catalogului școlar
public static synchronized SchoolCatalog getInstance() {
if (instance == null) {
instance = new SchoolCatalog();
}
return instance;
}

// Metoda pentru adăugarea unui elev în catalog
public void addStudent(Student student) {
students.add(student);
observers.put(student, new ArrayList<>());
}

// Metoda pentru adăugarea unui observator pentru un elev
public void addObserver(Student student, NotificationObserver observer) {
List<NotificationObserver> studentObservers = observers.get(student);
studentObservers.add(observer);
}

// Metoda pentru eliminarea unui observator pentru un elev
public void removeObserver(Student student, NotificationObserver observer) {
List<NotificationObserver> studentObservers = observers.get(student);
studentObservers.remove(observer);
}

// Metoda pentru adăugarea unei note pentru un elev
public void addGrade(String studentName, String grade) {
for (Student student : students) {
if (student.getName().equals(studentName)) {
student.addGrade(grade);
notifyObservers(student, studentName, grade);
break;
}
}
}

// Metoda privată pentru notificarea observatorilor
private void notifyObservers(Student student, String studentName, String grade) {
List<NotificationObserver> studentObservers = observers.get(student);
for (NotificationObserver observer : studentObservers) {
observer.update(studentName, grade);
}
}
}

// Interfața Observer pentru observatorii de notificări
interface NotificationObserver {
void update(String studentName, String grade);
}

// Clasa Părinte care implementează interfața NotificationObserver
class Parent implements NotificationObserver {
private String name;
private Student child;

public Parent(String name, Student child) {
this.name = name;
this.child = child;
}

public void update(String studentName, String grade) {
if (studentName.equals(child.getName())) {
System.out.println("Părintele " + name + " a primit notificare pentru elevul " + studentName + ": Notă nouă: " + grade);
}
}
}

// Clasa principală care demonstrează utilizarea catalogului școlar
class SchoolCatalogApp {
public static void main(String[] args) {
//TODO implement your design patterns in this package
// Cream catalogul școlar folosind Singleton
SchoolCatalog catalog = SchoolCatalog.getInstance();

// Adăugăm elevi în catalog
Student student1 = new Student("Ionut");
Student student2 = new Student("Alice");
Student student3 = new Student("Maria");
catalog.addStudent(student1);
catalog.addStudent(student2);
catalog.addStudent(student3);

// Cream profesor
Teacher teacher = new Teacher("Popescu");

// Cream părinți și adăugăm observatori pentru fiecare elev
Parent parent1 = new Parent("Mateescu", student1);
Parent parent2 = new Parent("Anghelescu", student2);
Parent parent3 = new Parent("Ionescu", student3);
catalog.addObserver(student1, parent1);
catalog.addObserver(student2, parent2);
catalog.addObserver(student3, parent3);

// Profesorul adaugă note pentru elevi
teacher.addGrade("Ionut");
teacher.addGrade("Alice");
teacher.addGrade("Maria");

// Eliminăm un observator (părinte) de la catalog
catalog.removeObserver(student2, parent2);

// Profesorul adaugă alte note pentru elevi
teacher.addGrade("Ionut");
teacher.addGrade("Maria");
}
}