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