diff --git a/src/main/java/edu/iful/oop/patterns/observer/WeatherData.java b/src/main/java/edu/iful/oop/patterns/observer/WeatherData.java index 94dcb52..8e941a6 100755 --- a/src/main/java/edu/iful/oop/patterns/observer/WeatherData.java +++ b/src/main/java/edu/iful/oop/patterns/observer/WeatherData.java @@ -16,11 +16,13 @@ public class WeatherData implements Subject { public WeatherData() { // ToDo: Ініціалізуйте список Передплатників порожнім списком // (використайте, наприклад, ArrayList). + this.observers = new ArrayList<>(); } @Override public void registerObserver(Observer o) { // ToDo: Додайте нового Передплатника до списку. + this.observers.add(o); } @Override @@ -34,10 +36,12 @@ public void removeObserver(Observer o) { @Override public void notifyObservers() { // ToDo: Передайте нові дані метеоспостережень кожному з Передплатників в списку за допомогою метода 'update()'. + this.observers.forEach(observer -> observer.update(getTemperature(), getHumidity(), getPressure())); } public void measurementsChanged() { // ToDo: Повідмте своїх Передплатників про зміну даних. + notifyObservers(); } public void setMeasurements(float temperature, float humidity, float pressure) { diff --git a/src/main/java/edu/iful/oop/patterns/singleton/Singleton.java b/src/main/java/edu/iful/oop/patterns/singleton/Singleton.java index cbbc410..43c8fcf 100644 --- a/src/main/java/edu/iful/oop/patterns/singleton/Singleton.java +++ b/src/main/java/edu/iful/oop/patterns/singleton/Singleton.java @@ -7,15 +7,19 @@ public class Singleton { // Оголосіть приватну статичну змінну INSTANCE типу Singleton. + private static Singleton INSTANCE; // Змініть режим доступу конструктора з public на private. - public Singleton() { + private Singleton() { System.out.println("Constructor Instance " + toString()); } public static Singleton getInstance() { // Замість створення нового об'єкта Singleton // ініціалізуйте (один раз!) змінну INSTANCE і повертайте її значення. - return new Singleton(); + if (INSTANCE == null) { + INSTANCE = new Singleton(); + } + return INSTANCE; } } diff --git a/src/main/java/edu/iful/oop/patterns/strategy/DecoyDuck.java b/src/main/java/edu/iful/oop/patterns/strategy/DecoyDuck.java index cfdac04..c224a04 100644 --- a/src/main/java/edu/iful/oop/patterns/strategy/DecoyDuck.java +++ b/src/main/java/edu/iful/oop/patterns/strategy/DecoyDuck.java @@ -1,5 +1,8 @@ package edu.iful.oop.patterns.strategy; +import edu.iful.oop.patterns.strategy.behavior.FlyNoWay; +import edu.iful.oop.patterns.strategy.behavior.Squeak; + /** * Качка примнка */ @@ -8,5 +11,7 @@ public class DecoyDuck extends Duck { public DecoyDuck() { // Ініціалізуйте поведінку качки-приманки: // ця качка не літатє і пищить. + setFlyBehavior(new FlyNoWay()); + setQuackBehavior(new Squeak()); } } \ No newline at end of file diff --git a/src/main/java/edu/iful/oop/patterns/strategy/Duck.java b/src/main/java/edu/iful/oop/patterns/strategy/Duck.java index 84f0a57..639a125 100644 --- a/src/main/java/edu/iful/oop/patterns/strategy/Duck.java +++ b/src/main/java/edu/iful/oop/patterns/strategy/Duck.java @@ -1,5 +1,8 @@ package edu.iful.oop.patterns.strategy; +import edu.iful.oop.patterns.strategy.behavior.FlyBehavior; +import edu.iful.oop.patterns.strategy.behavior.QuackBehavior; + /** *

* Джо працює на компанію, що випускає надзвичайно @@ -29,7 +32,8 @@ public abstract class Duck { // Тут необхідно оголосити дві зсилочні змінні з типами інерфейсів поведінки. // Ці змінні наслідуються всіма підкласами Duck. // Добавте 'сеттери' для цих полів. - + private FlyBehavior flyBehavior; + private QuackBehavior quackBehavior; public String swim() { return SWIM_MESSAGE; @@ -41,12 +45,19 @@ public String display() { public String performQuack() { // Замінити оператор 'return null;' на делегування операції класа поведінки. - return null; + return quackBehavior.quack(); } public String performFly() { // Замінити оператор 'return null;' на делегування операції класа поведінки. - return null; + return flyBehavior.fly(); } + public void setFlyBehavior(FlyBehavior flyBehavior) { + this.flyBehavior = flyBehavior; + } + + public void setQuackBehavior(QuackBehavior quackBehavior) { + this.quackBehavior = quackBehavior; + } } diff --git a/src/main/java/edu/iful/oop/patterns/strategy/MallardDuck.java b/src/main/java/edu/iful/oop/patterns/strategy/MallardDuck.java index 458080a..a52d37a 100644 --- a/src/main/java/edu/iful/oop/patterns/strategy/MallardDuck.java +++ b/src/main/java/edu/iful/oop/patterns/strategy/MallardDuck.java @@ -1,5 +1,8 @@ package edu.iful.oop.patterns.strategy; +import edu.iful.oop.patterns.strategy.behavior.FlyWithWings; +import edu.iful.oop.patterns.strategy.behavior.Quack; + /** * Клас Дика качкаю */ @@ -8,5 +11,7 @@ public class MallardDuck extends Duck { public MallardDuck() { // Ініціалізуйте поведінку дикої качки: // дика качка вміє літати і крякати. + setFlyBehavior(new FlyWithWings()); + setQuackBehavior(new Quack()); } } diff --git a/src/main/java/edu/iful/oop/patterns/strategy/RedHeadDuck.java b/src/main/java/edu/iful/oop/patterns/strategy/RedHeadDuck.java index 713068a..04588e8 100644 --- a/src/main/java/edu/iful/oop/patterns/strategy/RedHeadDuck.java +++ b/src/main/java/edu/iful/oop/patterns/strategy/RedHeadDuck.java @@ -1,5 +1,8 @@ package edu.iful.oop.patterns.strategy; +import edu.iful.oop.patterns.strategy.behavior.FlyWithWings; +import edu.iful.oop.patterns.strategy.behavior.Quack; + /** * Ще одна качка із всесвіту качок. */ @@ -8,5 +11,7 @@ public class RedHeadDuck extends Duck { public RedHeadDuck() { // Ініціалізуйте поведінку качки: // ця качка вміє літати і крякати. + setFlyBehavior(new FlyWithWings()); + setQuackBehavior(new Quack()); } } diff --git a/src/main/java/edu/iful/oop/patterns/strategy/RubberDuck.java b/src/main/java/edu/iful/oop/patterns/strategy/RubberDuck.java index 1ae8395..e554195 100644 --- a/src/main/java/edu/iful/oop/patterns/strategy/RubberDuck.java +++ b/src/main/java/edu/iful/oop/patterns/strategy/RubberDuck.java @@ -1,5 +1,8 @@ package edu.iful.oop.patterns.strategy; +import edu.iful.oop.patterns.strategy.behavior.FlyNoWay; +import edu.iful.oop.patterns.strategy.behavior.MuteQuack; + /** * Гумова качечка. */ @@ -8,5 +11,7 @@ public class RubberDuck extends Duck { public RubberDuck() { // Ініціалізуйте поведінку гумової качки: // ця качка не літатє і мовчить. + setFlyBehavior(new FlyNoWay()); + setQuackBehavior(new MuteQuack()); } } diff --git a/src/main/java/edu/iful/oop/patterns/strategy/behavior/FlyNoWay.java b/src/main/java/edu/iful/oop/patterns/strategy/behavior/FlyNoWay.java index 897a5f9..334b03a 100644 --- a/src/main/java/edu/iful/oop/patterns/strategy/behavior/FlyNoWay.java +++ b/src/main/java/edu/iful/oop/patterns/strategy/behavior/FlyNoWay.java @@ -9,6 +9,6 @@ public class FlyNoWay implements FlyBehavior { @Override public String fly() { - return null; + return FLY_MESSAGE; } }