Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Smart Home Control Center

Hur man kör programmet

  1. Öppna projektet i Visual Studio
  2. Tryck på Run ▶️
  3. Output visas i konsolen

Beskrivning

Detta projekt är ett enkelt Smart Home system. Man kan styra en lampa, köra kommandon och byta mode.

Programmet visar hur ett system kan vara uppbyggt bakom kulisserna. Fokus är inte på grafik, utan på hur koden är strukturerad.


Syfte

Syftet med uppgiften är att visa att jag kan använda designmönster i praktiken. Jag ska inte bara kunna dem i teori, utan också använda dem i kod.

Jag visar också att jag kan bygga ett system som är tydligt, modulärt och lätt att ändra.


Designmönster

Observer

Observer används för att skicka uppdateringar när något ändras. När lampan sätts på får flera delar information direkt. Jag har tre observers: Dashboard, Logger och Audit. Detta gör att flera delar kan reagera samtidigt utan att Lamp behöver känna till dem.


Command

Command används för att kapsla in actions som objekt. Jag har TurnOnCommand som sätter på lampan. CommandInvoker kör kommandon och sparar dem i en lista. Jag kan också köra senaste kommandon igen (replay), vilket ger mer flexibilitet.


Strategy

Strategy används för olika lägen i systemet. Jag har NormalMode, EcoMode och PartyMode. När man byter mode ändras systemets beteende utan att ändra annan kod. Det gör systemet mer flexibelt och lätt att bygga ut.


Facade

Facade används för att göra systemet enklare att använda. SmartHomeFacade samlar alla funktioner i en klass. Program.cs använder bara Facade istället för att prata direkt med alla klasser. Det gör koden ren och lätt att förstå.


Singleton

Singleton används för Logger. Det betyder att det bara finns en instans av Logger i hela systemet. Alla delar använder samma logger, vilket gör loggning enkel och centraliserad.


Struktur

Projektet är uppdelat i mappar baserat på ansvar:

  • Core → gemensamma delar (Logger)
  • Devices → enheter (Lamp)
  • Observers → lyssnare
  • Commands → kommandon och invoker
  • Strategy → olika modes
  • Facade → huvudkontroll
  • Docs → klassdiagram (PDF)

Klassstruktur

SmartHomeHub
 ├── Core
 │    └── Logger.cs
 │
 ├── Devices
 │    └── Lamp.cs
 │
 ├── Observers
 │    ├── IObserver.cs
 │    ├── DashboardObserver.cs
 │    ├── LoggerObserver.cs
 │    └── AuditObserver.cs
 │
 ├── Commands
 │    ├── ICommand.cs
 │    ├── TurnOnCommand.cs
 │    └── CommandInvoker.cs
 │
 ├── Strategy
 │    ├── IModeStrategy.cs
 │    ├── NormalMode.cs
 │    ├── EcoMode.cs
 │    └── PartyMode.cs
 │
 ├── Facade
 │    └── SmartHomeFacade.cs
 │
 ├── Docs
 │    └── SmartHome_UML_DrawIO_Style.pdf
 │
 ├── Program.cs
 └── README.md

Detta visar tydligt hur hela projektet är uppbyggt.


Klassdiagram

Klassdiagram finns i mappen Docs som PDF-fil.

Fil: Docs/SmartHome_UML_DrawIO_Style.pdf

Diagrammet visar hur klasserna hänger ihop och vilka relationer de har.


Exempel output

Normal Mode active

Dashboard: Lamp turned ON LOG: Lamp turned ON Audit: Lamp turned ON

Party Mode active

Dashboard: Lamp turned ON LOG: Lamp turned ON Audit: Lamp turned ON

Replaying last commands:

Dashboard: Lamp turned ON LOG: Lamp turned ON Audit: Lamp turned ON


Reflektion

Designmönster hjälper att göra kod mer strukturerad och flexibel. De gör det lättare att ändra och bygga ut systemet.

Men man ska inte alltid använda designmönster i små projekt, för det kan göra koden mer komplex än nödvändigt.

I detta projekt passar de bra eftersom flera delar jobbar tillsammans.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages