Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //ISubject
- package Package;
- public interface ISubject
- {
- void Subscribe(Displayer Displayer);
- void Unsubscribe(Displayer Displayer);
- void NotifyObservers();
- }
- //IObserver
- package Package;
- public interface IObserver
- {
- void Update(int NewHour, int NewMinute);
- }
- //Displayer
- package Package;
- public class Displayer implements IObserver
- {
- protected String RoomName;
- public int CurrH;
- public int CurrentMin;
- public Displayer(String RoomName)
- {
- this.RoomName = RoomName;
- }
- public void Update(int NewH, int NewMin)
- {
- CurrH = NewH;
- CurrentMin = NewMin;
- System.out.println("W " + RoomName + " jest godzina " + CurrH + ":" + CurrentMin);
- }
- }
- //Timer
- package Package;
- import java.util.Scanner;
- public class Timer {
- public void ProgStart()
- {
- System.out.println("Program do synchronizacji pracy zegarów");
- Scanner UserIn = new Scanner(System.in);
- int timerFunction;
- MainClock MainClock = new MainClock();
- boolean RoomDisplayFlag = false;
- boolean KitchenDisplayFlag = false;
- boolean GardenDisplayFlag = false;
- boolean ClockRunnigFlag = false;
- Displayer RoomDisplayer = new Displayer("pokoju");
- Displayer KitchenDisplayer = new Displayer("kuchni");
- Displayer GardenDisplayer = new Displayer("ogrodzie");
- do{
- showMenu();
- timerFunction = UserIn.nextInt();
- switch(timerFunction){
- case 1:
- if(ClockRunnigFlag == false)
- {
- System.out.println("Zegar centralny zaczął odmierzać czas.");
- ClockRunnigFlag = true;
- MainClock.start();
- }
- else
- {
- System.out.println("Zegar już działa!");
- }
- break;
- case 2:
- if(RoomDisplayFlag == true)
- {
- System.out.println("Usunięto wyświetlacz pokojowy.");
- RoomDisplayFlag = false;
- MainClock.Unsubscribe(RoomDisplayer);
- }
- else
- {
- RoomDisplayFlag = true;
- System.out.println("Dodano wyświetlacz pokojowy.");
- MainClock.Subscribe(RoomDisplayer);
- }
- break;
- case 3:
- if(KitchenDisplayFlag == true)
- {
- System.out.println("Usunięto wyświetlacz kuchenny.");
- KitchenDisplayFlag = false;
- MainClock.Unsubscribe(KitchenDisplayer);
- }
- else
- {
- KitchenDisplayFlag = true;
- System.out.println("Dodano wyświetlacz kuchenny.");
- MainClock.Subscribe(KitchenDisplayer);
- }
- break;
- case 4:
- if(GardenDisplayFlag == true)
- {
- System.out.println("Usunięto wyświetlacz ogrodowy.");
- GardenDisplayFlag = false;
- MainClock.Unsubscribe(GardenDisplayer);
- }
- else
- {
- GardenDisplayFlag = true;
- System.out.println("Dodano wyświetlacz ogrodowy.");
- MainClock.Subscribe(GardenDisplayer);
- }
- break;
- case 0:
- System.out.println("Zakończenie Programu.");
- MainClock.StopClock();
- break;
- default: System.out.println("Proszę podać poprawną cyfrę do menu");
- }
- }while(timerFunction != 0);
- UserIn.close();
- }
- public void showMenu()
- {
- System.out.println("Aby uruchomić zegar centralny naciśnij \"1\".");
- System.out.println("W celu dodania/usunięcia wyświetlacza pokojowego naciśnij \"2\".");
- System.out.println("W celu dodania/usunięcia wyświetlacza kuchennego naciśnij \"3\".");
- System.out.println("W celu dodania/usunięcia wyświetlacza ogrodowego naciśnij \"4\".");
- System.out.println("Aby zatrzymać działanie programu naciśnij \"0\".");
- }
- }
- //MainClock
- package Package;
- import java.util.ArrayList;
- import java.util.List;
- public class MainClock extends Thread implements ISubject
- {
- private List<Displayer> Displayers = new ArrayList<>();
- private int CurrentH = 0;
- private int CurrentMin = -1;
- private volatile boolean IsRunning = true;
- private volatile int ElapsedSec;
- public synchronized void StopClock()
- {
- this.IsRunning = false;
- }
- @Override
- public void run()
- {
- while(IsRunning)
- {
- try
- {
- ElapsedSec += 1;
- CurrentMin += 1;
- if(CurrentMin >= 60)
- {
- CurrentMin = 0;
- CurrentH += 1;
- }
- if(CurrentH >= 24)
- {
- CurrentH = 0;
- }
- NotifyObservers();
- Thread.sleep(6000);
- }catch(InterruptedException ex)
- {
- System.out.println("Zegar natrafił na nieoczekiwany błąd.");
- }
- }
- }
- @Override
- public void Subscribe(Displayer Displayer)
- {
- Displayers.add(Displayer);
- }
- @Override
- public void Unsubscribe(Displayer Displayer)
- {
- Displayers.remove(Displayer);
- }
- @Override
- public void NotifyObservers()
- {
- for(Displayer Displayer: Displayers)
- {
- Displayer.Update(CurrentH, CurrentMin);
- }
- }
- }
- //Main
- package Package;
- public class Main {
- public static void main(String[] args)
- {
- Timer Clock = new Timer();
- Clock.ProgStart();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement