主程序
clc
clear
close all
modelObj = Model(500);
viewObj = View(modelObj);
M(model)類
classdef Model < handle
properties
balance
end
events
balanceChanged
end
methods
function obj = Model(balance)
obj.balance = balance;
end
function deposit(obj,val)
obj.balance = obj.balance + val;
obj.notify('balanceChanged');
end
function withdraw(obj,val)
obj.balance = obj.balance - val;
obj.notify('balanceChanged');
end
end
end
V(view)類
classdef View < handle
properties
viewSize;
hfig;
drawButton;
depositButton;
balanceBox;
numBox;
text;
modelObj;
controlObj;
end
properties(Dependent)
input;
end
methods
function obj = View(modelObj)
obj.viewSize = [100,100,300,200];
obj.modelObj = modelObj;
obj.modelObj.addlistener('balanceChanged',@obj.updateBalance);
obj.buildUI();
obj.controlObj = obj.makeController();
obj.attachToController(obj.controlObj);
end
function input = get.input(obj)
input = get(obj.numBox,'string');
input = str2double(input);
end
function buildUI(obj)
obj.hfig = figure('pos',obj.viewSize);
obj.drawButton = uicontrol('parent',obj.hfig,'string','withdraw','pos',[60,28,60,28]);
obj.depositButton = uicontrol('parent',obj.hfig,'string','deposit','pos',[180,28,60,28]);
obj.numBox = uicontrol('parent',obj.hfig,'style','edit','pos',[60,85,180,28],...
'tag','numBox');
obj.balanceBox = uicontrol('parent',obj.hfig,'style','edit','pos',[180,142,60,28],...
'tag','balancebox');
obj.text = uicontrol('parent',obj.hfig,'style','text','string','balance','pos',[60,142,60,28]);
obj.updateBalance();
end
function updateBalance(obj,scr,data)
set(obj.balanceBox,'string',num2str(obj.modelObj.balance));
end
function controlObj = makeController(obj)
controlObj = Controller(obj,obj.modelObj);
end
function attachToController(obj,controller)
funcH = @controller.callback_drawbutton;
set(obj.drawButton,'callback',funcH);
funcH = @controller.callback_depositbutton;
set(obj.depositButton,'callback',funcH);
end
end
end
C(controller)類
classdef Controller < handle
properties
viewObj;
modelObj;
end
methods
function obj = Controller(viewObj,modelObj)
obj.viewObj = viewObj;
obj.modelObj = modelObj;
end
function callback_drawbutton(obj,src,event)
obj.modelObj.withdraw(obj.viewObj.input);
end
function callback_depositbutton(obj,src,event)
obj.modelObj.deposit(obj.viewObj.input);
end
end
end