loadobjПредположим, что вы создаете прослушиватель свойств и хотите иметь возможность сохранять и восстанавливать источник события и слушатель. Один из подходов - создать прослушиватель из loadobj способ.
The BankAccount класс сохраняет сальдо счета и статус счета. A PostSet прослушиватель, подключенный к AccountBalance свойство контролирует состояние учетной записи.
Когда AccountBalance изменяется значение свойства, статус учетной записи определяется коллбэком прослушивателя. Важными точками являются:
The BankAccount класс задает AccountManagerListener свойство, содержащее указатель на прослушиватель. Это свойство включает loadobj метод, чтобы создать прослушиватель и вернуть ссылку на него в объект, который загружается в рабочую область.
The AccountManagerListener свойство Transient потому что нет необходимости хранить указатель прослушивателя в BankAccount объект. Создайте прослушиватель, который присоединен к новому BankAccount объект, созданный в процессе загрузки.
The AccountBalance прослушиватель устанавливает AccountStatus.
Только AccountManager класс может получить доступ к AccountStatus свойство.
classdef BankAccount < handle properties (SetObservable, AbortSet) AccountBalance end properties (Transient) AccountManagerListener end properties (Access = ?AccountManager) AccountStatus end methods function obj = BankAccount(initialBalance) obj.AccountBalance = initialBalance; obj.AccountStatus = 'New Account'; obj.AccountManagerListener = AccountManager.addAccount(obj); end end methods (Static) function obj = loadobj(obj) if isstruct(obj) % Handle error initialBalance = obj.AccountBalance; obj = BankAccount(initialBalance); else obj.AccountManagerListener = AccountManager.addAccount(obj); end end end end
Предположим, что AccountManager класс предоставляет услуги для различных типов учетных записей. Для BankAccount класс, AccountManager класс задает два Static методы:
assignStatus - Коллбэк для AccountBalance свойства PostSet прослушиватель. Этот метод определяет значение BankAccount
AccountStatus свойство.
addAccount - Создает AccountBalance свойства PostSet прослушиватель. The BankAccount конструктор и loadobj методы вызывают этот метод.
classdef AccountManager methods (Static) function assignStatus(BA,~) if BA.AccountBalance < 0 && BA.AccountBalance >= -100 BA.AccountStatus = 'overdrawn'; elseif BA.AccountBalance < -100 BA.AccountStatus = 'frozen'; else BA.AccountStatus = 'open'; end end function lh = addAccount(BA) lh = addlistener(BA,'AccountBalance','PostSet', ... @(src,evt)AccountManager.assignStatus(BA)); end end end
Создайте образец BankAccount класс.
ba = BankAccount(100)
ba =
BankAccount with properties:
AccountBalance: 100
AccountManagerListener: [1x1 event.proplistener]
AccountStatus: 'New Account'Теперь установите значение счета, чтобы подтвердить, что AccountManager устанавливает AccountStatus надлежащим образом:
ba.AccountBalance = -10; ba.AccountStatus
ans = overdrawn