ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.01.2024
Просмотров: 25
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Министерство образования и науки Российской Федерации
Федеральное государственное бюджетное образовательное учреждение
высшего образования
ИРКУТСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ
ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Институт информационных технологий и анализа данных |
наименование института |
ОТЧЁТ
К лабораторной работе №2 по дисциплине:
Разработка мобильных приложений |
Выполнил студент группы: | | | | | |
| шифр группы | | подпись | | Фамилия И.О. |
Проверил: | | | | | |
| должность | | подпись | | Фамилия И.О. |
Иркутск
Задание
-
Cоциальная сеть
Пользователи публикуют записи, которые могут быть оценены другими пользователями. Также пользователи могут быть подписаны на других пользователей, тем самым получая возможность оперативно узнавать о новых публикациях пользователей, на которых они подписались.
Для написания кода лучше всего использовать паттерн «наблюдатель». Паттерн Наблюдатель (Observer) позволяет определить зависимость типа "один-ко-многим" между объектами, таким образом, что при изменении состояния одного объекта все зависящие от него объекты будут уведомлены об этом и автоматически обновятся.
В данном коде класс Subject определяет интерфейс для наблюдаемого объекта, а класс Observer определяет интерфейс наблюдателя. Класс User является наблюдаемым объектом, а класс Follower наблюдателем. User реализует методы наблюдательного объекта removeObserver(Observer), registerObserver(Observer), addPost(Post) и notifyObserver(Post). Follower же реализует метод update(Post). Класс Post необходим для содержания количества лайков пользователей.
Рисунок 1 – UML диаграмма
Результат работы программы
Рисунок 2 – Результат работы программы
Листинг программы
interface Subject {
fun registerObserver(observer: Observer)
fun removeObserver(observer: Observer)
fun notifyObservers(post: Post)
}
interface Observer {
fun update(post: Post)
}
class User(val userName: String) : Subject {
private val followers = mutableListOf
private val posts = mutableListOf
()
override fun registerObserver(observer: Observer) {
followers.add(observer)
}
override fun removeObserver(observer: Observer) {
followers.remove(observer)
}
override fun notifyObservers(post: Post) {
followers.forEach { it.update(post) }
}
fun addPost(post: Post) {
posts.add(post)
notifyObservers(post)
}
}
class Follower(private val followerName: String) : Observer {
override fun update(post: Post) {
println("$followerName: ${post.author} выложил новый пост: '${post.text}'. лайков: ${post.likes}")
}
}
class Post(val author: String, val text: String, val likes: Int) {
}
fun main() {
val user1 = User("Дима")
val user2 = User("Данил")
val user3 = User("Женя")
val user4 = User("Никита")
val follower1 = Follower("Дима")
val follower2 = Follower("Данил")
val follower3 = Follower("Женя")
val follower4 = Follower("Никита")
user1.registerObserver(follower2)
user1.registerObserver(follower3)
user2.registerObserver(follower1)
user2.registerObserver(follower2)
user2.registerObserver(follower3)
user3.registerObserver(follower4)
user4.registerObserver(follower2)
user4.registerObserver(follower3)
println("Информация о постах пользователей: \n")
println("--------------------------------------------------------------------------------")
val user1Post1 = Post(user1.userName, "Первый пост от Димы", 5)
user1.addPost(user1Post1)
println("--------------------------------------------------------------------------------")
val user1Post2 = Post(user1.userName, "Второй пост от Димы", 7)
user1.addPost(user1Post2)
println("--------------------------------------------------------------------------------")
val user2Post1 = Post(user2.userName, "Первый пост от Данила",6)
user2.addPost(user2Post1)
println("--------------------------------------------------------------------------------")
val user3Post1 = Post(user3.userName, "Первый пост от Жени", 3)
user3.addPost(user3Post1)
println("--------------------------------------------------------------------------------")
val user4Post1 = Post(user4.userName, "Первый пост от Никиты", 13)
user4.addPost(user4Post1)
println("--------------------------------------------------------------------------------")
}
Заключение
В ходе данной лабораторной работе мы изучили основы разработки на языке Kotlin с использованием паттернов проектирования. Был реализован паттерн «Наблюдатель».