-
-
Save alexkonst/599156c4f2d5263c816f23001c9d43c2 to your computer and use it in GitHub Desktop.
TS homework 4
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// #### Паттерн Композиция — Система умного дома | |
// Создайте систему управления умным домом, использующую паттерн Композиция | |
// для управления различными устройствами (например, свет, термостат). | |
// Реализуйте класс SmartHome, который содержит коллекцию устройств и предоставляет методы | |
// для их массового включения, выключения и получения статуса. | |
// Каждое устройство должно реализовать интерфейс с методами включения, выключения и получения статуса. | |
// Требования: | |
// * Используйте композицию для управления набором устройств. | |
// * Обеспечьте добавление новых типов устройств без изменения кода SmartHome. | |
// * Реализуйте инкапсуляцию данных в классах устройств. | |
// PS: реализация важна с точки зрения типов. Фактическую реализацию можно не делать. | |
enum SwitchState { | |
On, | |
Off | |
} | |
interface Switchable { | |
status: SwitchState | |
switchOn(): void | |
switchOff(): void | |
} | |
class Device implements Switchable { | |
status: SwitchState = SwitchState.Off | |
switchOn(): void { | |
this.status = SwitchState.On | |
} | |
switchOff(): void { | |
this.status = SwitchState.Off | |
} | |
} | |
class SmartHome { | |
devices: Device[] = [] | |
add(device: Device): void {} | |
remove(device: Device): void {} | |
getStatus(): SwitchState[] { | |
return this.devices.map(({status}) => status) | |
} | |
switchAllOn(): void {} | |
switchAllOff(): void {} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// #### Паттерн Слуга — Управление задачами | |
// Разработайте систему управления задачами в проекте, используя паттерн Слуга | |
// для выполнения операций над задачами (например, установка приоритета, завершение задачи). | |
// Создайте класс Task с приватными полями (идентификатор, описание, статус, приоритет) | |
// и класс TaskServant, который выполняет операции над задачами, такие как изменение статуса или приоритета. | |
// Требования: | |
// * Реализуйте TaskServant как слугу, выполняющего операции над объектами Task. | |
// * Обеспечьте возможность массовой обработки задач (например, завершение всех задач с определенным приоритетом). | |
// * Используйте инкапсуляцию для защиты данных задачи. | |
// PS: реализация важна с точки зрения типов. Фактическую реализацию можно не делать. | |
enum Status { | |
Open, | |
InProgress, | |
Ready, | |
Closed | |
} | |
enum Priority { | |
Low, | |
Medium, | |
High | |
} | |
class Task { | |
constructor(private id: string, private description: string, private status: Status, private priority: Priority) {} | |
} | |
class TaskServant { | |
tasks: Task[] = [] | |
updatePriority(newPriority: Priority): void {} | |
updateStatus(newStatus: Status): void {} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// #### Паттерн Стратегия — Система уведомлений | |
// Создайте систему отправки уведомлений, используя паттерн Стратегия | |
// для реализации различных способов доставки (например, email, SMS, push). | |
// Реализуйте интерфейс стратегии уведомлений и класс NotificationService, | |
// который использует выбранную стратегию для отправки сообщений. | |
// Предусмотрите возможность динамической смены стратегии. | |
// Требования: | |
// * Реализуйте динамическую смену стратегии уведомлений. | |
// * Каждая стратегия должна возвращать строку с информацией об отправке уведомления. | |
// * Добавьте проверку на непустое сообщение перед отправкой. | |
// PS: реализация важна с точки зрения типов. Фактическую реализацию можно не делать. | |
enum DeliveryKind { | |
Email, | |
SMS, | |
Push | |
} | |
abstract class DeliveryStrategy implements DeliveryStrategy { | |
constructor(private kind: DeliveryKind) {} | |
send(message: string): string { | |
return `Delivered via ${this.kind}` | |
} | |
} | |
class NotificationService { | |
constructor(public deliveryStrategy: DeliveryStrategy) {} | |
changeStrategy(strategy: DeliveryStrategy) { | |
this.deliveryStrategy = strategy | |
} | |
notify(message: string): void { | |
if (message.length === 0) { | |
return | |
} | |
const result = this.deliveryStrategy.send(message) | |
console.log(result) | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// #### Паттерн Мост — Система рендеринга графики | |
// Разработайте систему рендеринга графических объектов, используя паттерн Мост для разделения абстракции рендеринга и способа вывода (например, SVG, Canvas). Создайте абстрактный класс Renderer и интерфейс RenderImplementation. Реализуйте два типа рендеринга: простой (отрисовка базовых фигур) и детализированный (отрисовка с эффектами). | |
// Требования: | |
// * Реализуйте мост между абстракцией рендеринга и реализацией вывода. | |
// * Детализированный рендеринг должен добавлять дополнительные параметры (например, тень или градиент). | |
// * Обеспечьте возможность смены реализации без изменения клиентского кода. | |
// PS: реализация важна с точки зрения типов. Фактическую реализацию можно не делать. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// #### Дружественный класс — Система управления доступом | |
// Создайте систему управления доступом, где класс Employee предоставляет доступ к своим приватным данным (например, идентификатор, уровень доступа) дружественному классу AccessManager. Реализуйте функционал проверки прав доступа и изменения уровня доступа сотрудника. | |
// Требования: | |
// * Обеспечьте доступ AccessManager к приватным данным Employee. | |
// * Реализуйте метод проверки, возвращающий, имеет ли сотрудник доступ к определенному ресурсу. | |
// * Реализуйте метод изменения уровня доступа с проверкой текущих прав. | |
// PS: реализация важна с точки зрения типов. Фактическую реализацию можно не делать. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment