loadobj
假设您创建了一个属性侦听器,并且希望能够保存和恢复事件源和侦听器。一种方法是从loadobj
方法。
的BankAccount
类存储帐户余额和帐户状态。一个PostSet
监听器附加到AccountBalance
属性控制帐户状态。
当AccountBalance
属性值更改时,侦听器回调将确定帐户状态。要点包括:
的BankAccount
类定义了AccountManagerListener
属性以包含侦听器句柄。此属性启用loadobj
方法创建侦听器,并在加载到工作区中的对象中返回对该侦听器的引用。
的AccountManagerListener
属性是瞬态
因为不需要使用BankAccount
对象。创建一个附加到newBankAccount
在加载过程中创建的。
的AccountBalance
侦听器设置AccountStatus
.
只有AccountManager
类可以访问AccountStatus
财产。
classdefBankAccount <处理性质(AbortSet SetObservable AccountBalance结束性质(瞬态)AccountManagerListener结束性质(Access = ?AccountManager结束方法函数obj = BankAccount(initialBalance)AccountBalance = initialBalance;obj。一个ccountStatus =“新帐户”;obj。一个ccountManagerListener = AccountManager.addAccount(obj);结束结束方法(静态)函数obj = loadobj (obj)如果isstruct (obj)%处理错误initialBalance = obj.AccountBalance;obj = BankAccount (initialBalance);其他的obj。一个ccountManagerListener = AccountManager.addAccount(obj);结束结束结束结束
假设AccountManager
Class为各种类型的帐户提供服务。为BankAccount
类,AccountManager
类定义了两个静态
方法:
assignStatus
-回调AccountBalance
财产PostSet
侦听器。该方法确定BankAccount
AccountStatus
财产。
addAccount
——创建AccountBalance
财产PostSet
侦听器。的BankAccount
构造函数和loadobj
方法调用此方法。
classdefAccountManager方法(静态)函数assignStatus (BA, ~)如果英航。一个ccountBalance < 0 && BA.AccountBalance >= -100 BA.AccountStatus =“透支”;elseif英航。一个ccountBalance < -100 BA.AccountStatus =“冻结”;其他的英航。一个ccountStatus =“开放”;结束结束函数lh = addlistener(BA,“AccountBalance”,“PostSet”,...@ (src evt) AccountManager.assignStatus (BA));结束结束结束
的实例BankAccount
类。
英航= BankAccount (100)
ba = BankAccount with properties: AccountBalance: 100proplistener] AccountStatus: '新帐户'
现在设置一个帐户值来确认AccountManager
集AccountStatus
适当的:
英航。一个ccountBalance = -10; ba.AccountStatus
ans =透支