loadobjПредположим, что вы создаете прослушиватель свойств и хотите иметь возможность сохранять и восстанавливать источник событий и прослушиватель. Один из подходов заключается в создании слушателя из loadobj способ.
BankAccount В классе хранится сальдо счета и статус счета. A PostSet прослушиватель, присоединенный к AccountBalance свойство управляет состоянием учетной записи.
Когда AccountBalance значение свойства изменяется, обратный вызов прослушивателя определяет состояние учетной записи. К числу важных моментов относятся:
BankAccount класс определяет AccountManagerListener свойство, содержащее дескриптор прослушивателя. Это свойство включает loadobj метод для создания прослушивателя и возврата ссылки на него в объекте, загруженном в рабочую область.
AccountManagerListener свойство - Transient потому что нет необходимости хранить дескриптор прослушивателя с BankAccount объект. Создание прослушивателя, присоединенного к новому BankAccount объект, созданный в процессе загрузки.
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 слушатель. 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