Главная » C# » Реализация комнатных группировок приложения управления освещением в Visual C# (Sharp)

0

Комнатные группировки — это коллекции комнат с определенной организацией. Целью применения комнатных группировок является получение возможности волнять групповые операции, не сортируя комнаты перед этим. Например, в случае с музеем, при выполнении каждой глобальной операции нам не нужно будет вислять, является ли комната общей или частной.

Коллекция организована таким образом, что несколько комнатных группировок могут быть связаны между собой, а каждая отдельная группировка содержит взаосвязанные комнаты. Структура связанного списка имеет два уровня и выглядит таким образом (код находится в Проекте LibLightingSystem):

class RoomGrouping г BaseLinkedList { public Room Rooms;

public string Description;

}

class Room : BaseLinkedList { public IRoom ObjRoom;

}

Объявление класса Room представляет отдельную комнату. Но обратите внимание на то, каким образом он происходит от класса BaseLinkedList, что вроде бы поазумевает, что класс Room представляет множественные комнаты. Это является частью реализации связанного списка, который подобен цепочке, состоящей из оельных звеньев.

Класс RoomGrouping имеет два члена данных: Rooms, который представляет список комнат в группировке, и Description, представляющий понятное описание груировки. А класс Room имеет всего лишь один член данных: ссылку на экземпляр интерфейса IRoom. Этот член данных не знает о коллекции и управляется другим объектом, который содержит ссылки на отдельные экземпляры IRoom, подобно массиву экземпляров IRoom.

Для управления комнатными группировками применяется класс LightingController.

Первоначальная реализация данного класса выглядит таким образом:

public class LightingController {

private BaseLinkedList _roomGroupings = new RoomGrouping();

}

При работе со связанными списками возникает проблема определения первого элента списка. При использовании массивов пустой список массивов является массивом без ссылок, но имеется явный объект массива. При использовании же связанных списков, пустой связанный список— это несуществующий список. Тим образом, для создания списка требуется комната. Первым элементом класса LightingController является экземпляр класса RoomGrouping, который не содеит никаких комнатных группировок, а всего лишь служит в качестве заполнителя. Новую комнатную группировку можно добавить с помощью следующего кода:

_roomGroupings.Insert(newRoomGroup);

А если бы у нас не было заполнителя для комнатных группировок, то чтобы добить элемент в список комнатных группировок, пришлось бы использовать слующий код:

if (_roomGroupings == null) {

_roomGroupings = newRoomGroup;

}

else {

  roomGroupings.Insert(newRoomGroup);

}

Как можно видеть , использование заполнителя упрощает код и уменьшает его обм; но при этом  также требуется не выполняющий никаких операций пустой  эемпляр класса RoomGrouping. Я предпочитаю последний подход, т. к. я решил, что комнатная группировка без идентификатора будет группировкой по умолчанию.

Источник: Гросс  К. С# 2008:  Пер. с англ. — СПб.:  БХВ-Петербург, 2009. — 576 е.:  ил. — (Самоучитель)

По теме:

  • Комментарии