Professional Documents
Culture Documents
IDZC#
IDZC#
ІНЖЕНЕРНО-ФІЗИЧНИЙ ФАКУЛЬТЕТ
КАФЕДРА ДИНАМІКИ І МІЦНОСТИ МАШИН
Стек-технології .NET
Індивідуальне домашнє завдання
Харків 2018
Задача: використовуючи шаблон проектування "Наблюдатель" необхідно
розробити додаток, в якому є дві кнопки, при натисканні на які генерується
два типа подій. Також є три панелі, які змінюють колір на випадковий при
настанні першої події, а при настанні другої події на панель виводиться
поточний час випадковим кольором. В додатку можна динамічно
додавати/видаляти підписантів на події. Додати кнопку, яка генерує третій
тип події, згідно варіанту:
Subject:
ConcreteSubject:
{if (observers.Count != 0)
{observers[observers.Count - 1].panel.Dispose();
observers.Remove(observers[observers.Count - 1]);
Observe:
ConcreteObserve:
{case "1":{
break; }
case "2":
l.Text = DateTime.Now.ToLongTimeString();
panel.Controls.Add(l);
break; }
case "3":
l.Text = "Привет";
break;
Код програми:
namespace WindowsFormsApplication6
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication6
{
public partial class Form1 : Form
{
internal ConcreteSubject subject = new ConcreteSubject();
public Form1()
{
InitializeComponent();
ConcreteObserver observer = new ConcreteObserver();
observer.panel = panel1;
subject.Attach(observer);
observer = new ConcreteObserver();
observer.panel = panel2;
subject.Attach(observer);
observer = new ConcreteObserver();
observer.panel = panel3;
subject.Attach(observer);
}
{
button3.BackColor = Color.White;
class ConcreteSubject:Subject
{
List<Observer> observers;
public ConcreteSubject()
{
observers = new List<Observer>();
}
public override void Attach(Observer observer)
{
observers.Add(observer);
}
//----------//
abstract class Observer
{
public abstract void Update(string state);
abstract public Panel panel {get;set;}
}
}
}
}
}