Advertisement
DearOohDeer

Obserwator

Apr 12th, 2022
1,193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.33 KB | None | 0 0
  1. //ISubject
  2. package Package;
  3.  
  4. public interface ISubject
  5. {
  6.     void Subscribe(Displayer Displayer);
  7.     void Unsubscribe(Displayer Displayer);
  8.     void NotifyObservers();
  9. }
  10.  
  11. //IObserver
  12. package Package;
  13.  
  14. public interface IObserver
  15. {
  16.     void Update(int NewHour, int NewMinute);
  17. }
  18.  
  19. //Displayer
  20. package Package;
  21.  
  22. public class Displayer implements IObserver
  23. {
  24.     protected String RoomName;
  25.     public int CurrH;
  26.     public int CurrentMin;
  27.     public Displayer(String RoomName)
  28.     {
  29.         this.RoomName = RoomName;
  30.     }
  31.  
  32.     public void Update(int NewH, int NewMin)
  33.     {
  34.         CurrH = NewH;
  35.         CurrentMin = NewMin;
  36.         System.out.println("W " + RoomName + " jest godzina " + CurrH + ":" + CurrentMin);
  37.     }
  38. }
  39.  
  40. //Timer
  41. package Package;
  42.  
  43. import java.util.Scanner;
  44.  
  45. public class Timer {
  46.  
  47.     public void ProgStart()
  48.     {
  49.         System.out.println("Program do synchronizacji pracy zegarów");
  50.  
  51.         Scanner UserIn = new Scanner(System.in);
  52.         int timerFunction;
  53.  
  54.         MainClock MainClock = new MainClock();
  55.         boolean RoomDisplayFlag = false;
  56.         boolean KitchenDisplayFlag = false;
  57.         boolean GardenDisplayFlag = false;
  58.         boolean ClockRunnigFlag = false;
  59.  
  60.         Displayer RoomDisplayer = new Displayer("pokoju");
  61.         Displayer KitchenDisplayer = new Displayer("kuchni");
  62.         Displayer GardenDisplayer = new Displayer("ogrodzie");
  63.  
  64.         do{
  65.             showMenu();
  66.             timerFunction = UserIn.nextInt();
  67.             switch(timerFunction){
  68.                 case 1:
  69.                     if(ClockRunnigFlag == false)
  70.                     {
  71.                         System.out.println("Zegar centralny zaczął odmierzać czas.");
  72.                         ClockRunnigFlag = true;
  73.                         MainClock.start();
  74.                     }
  75.                     else
  76.                     {
  77.                         System.out.println("Zegar już działa!");
  78.                     }
  79.                     break;
  80.                 case 2:
  81.                     if(RoomDisplayFlag == true)
  82.                     {
  83.                         System.out.println("Usunięto wyświetlacz pokojowy.");
  84.                         RoomDisplayFlag = false;
  85.                         MainClock.Unsubscribe(RoomDisplayer);
  86.                     }
  87.                     else
  88.                     {
  89.                         RoomDisplayFlag = true;
  90.                         System.out.println("Dodano wyświetlacz pokojowy.");
  91.                         MainClock.Subscribe(RoomDisplayer);
  92.                     }
  93.                     break;
  94.                 case 3:
  95.                     if(KitchenDisplayFlag == true)
  96.                     {
  97.                         System.out.println("Usunięto wyświetlacz kuchenny.");
  98.                         KitchenDisplayFlag = false;
  99.                         MainClock.Unsubscribe(KitchenDisplayer);
  100.                     }
  101.                     else
  102.                     {
  103.                         KitchenDisplayFlag = true;
  104.                         System.out.println("Dodano wyświetlacz kuchenny.");
  105.                         MainClock.Subscribe(KitchenDisplayer);
  106.                     }
  107.                     break;
  108.                 case 4:
  109.                     if(GardenDisplayFlag == true)
  110.                     {
  111.                         System.out.println("Usunięto wyświetlacz ogrodowy.");
  112.                         GardenDisplayFlag = false;
  113.                         MainClock.Unsubscribe(GardenDisplayer);
  114.                     }
  115.                     else
  116.                     {
  117.                         GardenDisplayFlag = true;
  118.                         System.out.println("Dodano wyświetlacz ogrodowy.");
  119.                         MainClock.Subscribe(GardenDisplayer);
  120.                     }
  121.                     break;
  122.                 case 0:
  123.                     System.out.println("Zakończenie Programu.");
  124.                     MainClock.StopClock();
  125.                     break;
  126.                 default: System.out.println("Proszę podać poprawną cyfrę do menu");
  127.             }
  128.         }while(timerFunction != 0);
  129.         UserIn.close();
  130.     }
  131.  
  132.     public void showMenu()
  133.     {
  134.         System.out.println("Aby uruchomić zegar centralny naciśnij \"1\".");
  135.         System.out.println("W celu dodania/usunięcia wyświetlacza pokojowego naciśnij \"2\".");
  136.         System.out.println("W celu dodania/usunięcia wyświetlacza kuchennego naciśnij \"3\".");
  137.         System.out.println("W celu dodania/usunięcia wyświetlacza ogrodowego naciśnij \"4\".");
  138.         System.out.println("Aby zatrzymać działanie programu naciśnij \"0\".");
  139.     }
  140. }
  141.  
  142. //MainClock
  143. package Package;
  144.  
  145. import java.util.ArrayList;
  146. import java.util.List;
  147.  
  148. public class MainClock extends Thread implements ISubject
  149. {
  150.     private List<Displayer> Displayers = new ArrayList<>();
  151.  
  152.      private int CurrentH = 0;
  153.      private int CurrentMin = -1;
  154.  
  155.  
  156.     private volatile boolean IsRunning = true;
  157.     private volatile int ElapsedSec;
  158.     public synchronized void StopClock()
  159.     {
  160.         this.IsRunning = false;
  161.     }
  162.  
  163.     @Override
  164.     public void run()
  165.     {
  166.  
  167.         while(IsRunning)
  168.         {
  169.             try
  170.             {
  171.                 ElapsedSec += 1;
  172.                 CurrentMin += 1;
  173.  
  174.  
  175.                 if(CurrentMin >= 60)
  176.                 {
  177.                     CurrentMin = 0;
  178.                     CurrentH += 1;
  179.                 }
  180.                 if(CurrentH >= 24)
  181.                 {
  182.                     CurrentH = 0;
  183.                 }
  184.  
  185.                 NotifyObservers();
  186.                 Thread.sleep(6000);
  187.             }catch(InterruptedException ex)
  188.             {
  189.                 System.out.println("Zegar natrafił na nieoczekiwany błąd.");
  190.             }
  191.         }
  192.     }
  193.  
  194.     @Override
  195.     public void Subscribe(Displayer Displayer)
  196.     {
  197.         Displayers.add(Displayer);
  198.     }
  199.  
  200.     @Override
  201.     public void Unsubscribe(Displayer Displayer)
  202.     {
  203.         Displayers.remove(Displayer);
  204.     }
  205.  
  206.     @Override
  207.     public void NotifyObservers()
  208.     {
  209.         for(Displayer Displayer: Displayers)
  210.         {
  211.             Displayer.Update(CurrentH, CurrentMin);
  212.         }
  213.     }
  214. }
  215.  
  216. //Main
  217. package Package;
  218.  
  219. public class Main {
  220.  
  221.     public static void main(String[] args)
  222.     {
  223.         Timer Clock = new Timer();
  224.  
  225.         Clock.ProgStart();
  226.     }
  227. }
  228.  
  229.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement