|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Как создать класс для изменения нескольких свойств сразу
И название придумать сложно и объяснить, хотя со вторым проще, так-как хочется не придумать новое, а повторить имеющееся. Как пример класс Matrix. Одноимённое свойство есть у всех ДО и при помощи этого класса, можно изменить несколько свойств сразу. Как такое реализовать я даже представить не могу, некогда такого не встречал. Единственное что приходит на скудный ум - ... Но я знаю, что это совсем не то, скорее всего для такой реализации есть правильное название. Поделитесь, как такое сделать?
package { import flash.display.Sprite; public class Main extends Sprite { public function Main() { var customClass:CustomClass = new CustomClass(); var properties:Properties = customClass.properties; properties.propertyOne = 10; properties.propertyTwo = 20; properties.propertyThree = 30; customClass.properties = properties; trace(customClass.propertyOne, customClass.propertyTwo, customClass.propertyThree); } } } package { public class CustomClass { private var _propertyOne:Number; private var _propertyTwo:Number; private var _propertyThree:Number; private var _properties:Properties; public function CustomClass() { } public function get properties():Properties { if (_properties == null) _properties = new Properties(); return _properties; } public function set properties(value:Properties):void { _properties = value; _properties.mutableClass = this; } public function set propertyOne(value:Number):void { if (value == _propertyOne) { return; } _propertyOne = value; } public function set propertyTwo(value:Number):void { if (value == _propertyTwo) { return; } _propertyTwo = value; } public function set propertyThree(value:Number):void { if (value == _propertyThree) { return; } _propertyThree = value; } public function get propertyOne():Number { return _propertyOne; } public function get propertyTwo():Number { return _propertyTwo; } public function get propertyThree():Number { return _propertyThree; } } } package { public class Properties { private var _propertyOne:Number; private var _propertyTwo:Number; private var _propertyThree:Number; private var _propertis:Vector.<String>; private var _mutableClass:CustomClass; public function Properties() { _propertis = new < String > ['propertyOne', 'propertyTwo', 'propertyThree']; } private function changeProperties():void { var length:int = _propertis.length; var property:String; for (var i:int = 0; i < length; i++) { property = _propertis[i]; _mutableClass[property] = this[property]; } } public function set mutableClass(value:CustomClass):void { if (value == _mutableClass) { return; } _mutableClass = value; this.changeProperties(); } public function get propertyOne():Number { return _propertyOne; } public function set propertyOne(value:Number):void { if (value == _propertyOne) { return; } _propertyOne = value; } public function get propertyTwo():Number { return _propertyTwo; } public function set propertyTwo(value:Number):void { if (value == _propertyTwo) { return; } _propertyTwo = value; } public function get propertyThree():Number { return _propertyThree; } public function set propertyThree(value:Number):void { if (value == _propertyThree) { return; } _propertyThree = value; } } } |
|
|||||
При изменении матрицы, изменения с объектом, которому она принадлежит не происходят. После изменения матрицы, ее нужно снова задать этому объекту.
То есть что получается. Есть у объекта свойство properties. Сначала мы получаем эти свойства через someObj.properties. Тут их можно прочитать и посмотреть что же там внутри. Дальше можно задать им новые значения var props:Object = someObj.properties; // берем props.someValue = newValue; // меняем значения someObj.properties = props; // снова отдаем Ну а в сеттере уже прочитать их и провести нужные изменения, что-то вроде |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
caseyryan Спасибо! Но тогда вот какой вопрос -
public function set properties(value:Object):void { for (var i:String in value) { this[i] = value[i]; } _properties = value; } Хотя я наверное с порядком присвоения напутал... |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Это называют
Matrix, GraphicsPath, TextFormat, наследники BitmapFilter, трансформации для цвета и звука. Им не нужны никакие ссылки на "хозяев". "Хозяева" сами должны уметь их правильно применять к себе. Это только свойства, в крайнем случае инструкции.
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 19.02.2014 в 19:33. Причина: ошибочка |
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
caseyryan я только написал и сразу понял ЧТО написал А Вы ещё заодно не подскажете, describeType свойства выводит в порядке объявления?
Добавлено через 36 минут Wolsh Спасибо! Сначала подумал, что это техническое название, но гугл показал, что даже паттерн такой есть. Сейчас буду читать. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
А блин, сам запутался. Это все же Data Transfer Object. Ну, я думаю Вы и сами уже нашли это и поняли разницу.
__________________
Reality.getBounds(this); |
|
|||||
.
|
Когда?! Когда ты отличишь класс от объекта? Свойство ссылается на объект (инстанс, зкземпляр) класса (типа) Matrix. Не на класс Matrix ни разу. Не на класс, а на объект. Объект этого класса. Класс тут вообще не причем. Есть объект, значит, у него есть класс, по которому он был сделан. Класс есть и у класса, т.к. сам класс является объектом. Чума.
|
|
|||||
Banned
[+4 24.02.14]
[+4 07.11.13] [+ 13.03.14] Регистрация: Mar 2013
Сообщений: 1,864
|
Цитата:
|
Часовой пояс GMT +4, время: 11:45. |
|
« Предыдущая тема | Следующая тема » |
|
|