一个假设的场景来问我的问题:
假设我们有两个实体:一个老板和一个雇员。当员工完成一项工作时,他/她想让人们知道。在这种情况下,老板会订阅消息并决定该做什么
我实现了这个接口,它具有任何其他类都可以实现的抽象方法。在这种情况下(因为他/她将决定他/她想做什么):
classdef (Abstract) Interface < handle
methods
getJobsCompleted(n)
end
endboss类继承接口并实现方法getJobsCompleted()
classdef Boss < Interface & handle
properties
myEmployee
end
methods
function this = Boss()
this.myEmployee = Employee(this)
this.myEmployee.doJobs();
end
%My boss implements (i.e. decides what to do) the abstract method
function getJobsCompleted(n)
%DO SOMETHING with n
end
end
end最后,员工执行工作并通知老板。
classdef Employee < handle
properties
numJobsCompleted;
boss = [];%pointer or reference to Boss instance
end
methods
function this = Employee(myBoss)
this.boss = myBoss; %reference/pointer to my boss so I know who to notify
end
function doJobs()
%% do something then let boss know
this.numJobsCompleted = 40;
this.boss.getJobsCompleted(this.numJobsCompleted);
end
end
end我一直试图做的是传递一个对雇员类的引用,以便他/她知道该通知哪个老板。
即
in Boss
this.myEmployee = Employee(this)发布于 2016-09-16 14:45:16
这是可行的,您只需要显式地接受对象实例作为所有方法的输入参数。您需要更新以下两个函数定义:
function doJobs(this)
function getJobsCompleted(this, n)尽管如此,更好的方法可能是使用事件和听众。然后,您将让员工发出"JobCompleted“事件,并让老板为他们的所有员工收听这些事件。这就避免了员工需要跟踪他们的老板。
classdef Boss < handle
properties
Employees
Listeners
end
methods
function this = Boss(employees)
this.Employees = employees;
this.Listeners = addlistener(employees, 'JobCompleted', @this.onJobCompleted);
end
function onJobCompleted(this, employee, evnt)
fprintf('%s completed a job!\n', employee.Name);
end
end
endEmployee.m
classdef Employee < handle
properties
Name
CompletedJobs = 0
end
events
JobCompleted
end
methods
function this = Employee(name)
this.Name = name;
end
function doJob(this)
this.CompletedJobs = this.CompletedJobs + 1;
notify(this, 'JobCompleted')
end
end
end并把它当作:
employees(1) = Employee('Fred');
employees(2) = Employee('Bill');
boss = Boss(employees);
doJob(employees);
doJob(employees(1));https://stackoverflow.com/questions/39534084
复制相似问题