Создание Прослушивателя с loadobjПредположим, что вы создаете прослушиватель свойства и хотите смочь сохранить и восстановить источник события и прослушиватель. Один подход должен создать прослушиватель из loadobj метод.
BankAccount класс хранит остаток на счете и состояние счета. 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