Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
_^ ч Структурные паттерны<br />
Теперь мы можем представить аппаратный блок компьютера в виде подкласса<br />
к CompositeEquipment под названием Chassis. Chassis наследует порожденные<br />
операции класса CompositeEquipment.<br />
class Chassis : public CompositeEquipment {<br />
public:<br />
Chassis(const char*);<br />
virtual -Chassis();<br />
};<br />
virtual Watt Power();<br />
virtual Currency NetPriceO;<br />
virtual Currency DiscountPrice();<br />
Мы можем аналогично определить и другие контейнеры для оборудования,<br />
например Cabinet (корпус) и Bus (шина). Этого вполне достаточно для сборки<br />
из отдельных блоков довольно простого персонального компьютера:<br />
Cabinet* cabinet = new Cabinet("PC Cabinet");<br />
Chassis* chassis = new Chassis("PC Chassis");<br />
cabinet->Add(chassis);<br />
Bus* bus = new Bus("MCA Bus");<br />
bus->Add(new Card("16Mbs Token Ring"));<br />
chassis->Add(bus);<br />
chassis->Add(new FloppyDisk("3.Sin Floppy"));<br />
cout « "Полная стоимость равна " « chassis->NetPrice()<br />
« endl;<br />
Известные применения<br />
Примеры паттерна компоновщик можно найти почти во всех объектно-ориентированных<br />
системах. Первоначально класс View в схеме модель/вид/контроллер<br />
в языке Smalltalk [KP88] был компоновщиком, и почти все библиотеки для<br />
построения пользовательских интерфейсов и каркасы проектировались аналогично.<br />
Среди них ЕТ++ (со своей библиотекой VObjects [WGM88]) и Interviews (классы<br />
Styles [LCI+92], Graphics [VL88] и Glyphs [CL90]). Интересно отметить, что<br />
первоначально вид View имел несколько подвидов, то есть он был одновременно<br />
и классом Component, и классом Composite. В версии 4.0 языка Smalltalk-80 схема<br />
модель/вид/контроллер была пересмотрена, в нее ввели класс Visual-Component,<br />
подклассами которого являлись View и CompositeView.<br />
В каркасе для построения компиляторов RTL, который написан на Smalltalk<br />
[JML92], паттерн компоновщик используется очень широко. RTLExpression -<br />
это разновидность класса Component для построения деревьев синтаксического<br />
разбора. У него есть подклассы, например Binary Express ion, потомками которого<br />
являются объекты класса RTLExpression. В совокупности эти классы определяют<br />
составную структуру для деревьев разбора. RegisterTransf'er - класс