Untitled
unknown
plain_text
2 years ago
3.7 kB
3
Indexable
// Общий интерфейс посредников. interface Mediator is method notify(sender: Component, event: string) // Конкретный посредник. Все связи между конкретными // компонентами переехали в код посредника. Он получает // извещения от своих компонентов и знает, как на них // реагировать. class AuthenticationDialog implements Mediator is private field title: string private field loginOrRegisterChkBx: Checkbox private field loginUsername, loginPassword: Textbox private field registrationUsername, registrationPassword, registrationEmail: Textbox private field okBtn, cancelBtn: Button constructor AuthenticationDialog() is // Здесь нужно создать объекты всех компонентов, подав // текущий объект-посредник в их конструктор. // Когда что-то случается с компонентом, он шлёт посреднику // оповещение. После получения извещения посредник может // либо сделать что-то самостоятельно, либо перенаправить // запрос другому компоненту. method notify(sender, event) is if (sender == loginOrRegisterChkBx and event == "check") if (loginOrRegisterChkBx.checked) title = "Log in" // 1. Показать компоненты формы входа. // 2. Скрыть компоненты формы регистрации. else title = "Register" // 1. Показать компоненты формы регистрации. // 2. Скрыть компоненты формы входа. if (sender == okBtn && event == "click") if (loginOrRegister.checked) // Попробовать найти пользователя с данными из // формы логина. if (!found) // Показать ошибку над формой логина. else // 1. Создать пользовательский аккаунт с данными // из формы регистрации. // 2. Авторизировать этого пользователя. // ... // Классы компонентов общаются с посредниками через их общий // интерфейс. Благодаря этому одни и те же компоненты можно // использовать в разных посредниках. class Component is field dialog: Mediator constructor Component(dialog) is this.dialog = dialog method click() is dialog.notify(this, "click") method keypress() is dialog.notify(this, "keypress") // Конкретные компоненты не связаны между собой напрямую. У них // есть только один канал общения — через отправку уведомлений // посреднику. class Button extends Component is // ... class Textbox extends Component is // ... class Checkbox extends Component is method check() is dialog.notify(this, "check") // ...
Editor is loading...
Leave a Comment