@startuml class User { name : string } User --> "*" User: listAmis User --> "*" notification : lesNotif User --> "*" ask : demandeDamis class notification { text : string } interface INotifier { notify : void } INotifier --|> Observer abstract UserManager { currentUser : User createUser (...data) getUser(): User deleteFriends(user1 : int, user2 :int) : void addFriends(user:id): void repondreDemandeAmis(idask : Ask,choice: bool) getFriends(user: id) } class ask { fromUser : int toUser : int } ask --|> Subject abstract Subject { + attatch(o : Observer): void + detach(o : Observer): void + notify(): void } Subject --> "*" Observer interface Observer { update(): void } UserManager ..> User UserManager o-- IUserRepository UserManager o-- INotifier interface IUserRepository { + findByUsername(username:string): User + addUser(user : User) : bool } IUserRepository ..> User @enduml