Создание Прослушивателя с 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