(转)as3 MVC模式


MVC模式是”Model-View-Controller”的缩写,中文翻译为”模式-视图-控制器”。MVC应用程序总是由这三个部分组成。 Event(事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。

MVC模式能使界面(Viwe)和数据(Model)能有效的分开,由控制器(Controller)去控制。
首先我们来看一下Model,Model按照我的理解是数据,就是所有的共用数据都是存储在Model里面的,时钟里有这样的数据,小时,分钟,秒;现在我们来建立一个Model,ModelLocator.as:

package clock.model
{

	import flash.events.Event;
	import flash.events.EventDispatcher;

	public class ModelLocator extends EventDispatcher
	{

		private var _hour:String;

		private var _minutes:String;

		private var _second:String;

		public function ModelLocator():void
		{
		}

		public function get hour():String
		{
			return _hour;
		}

		public function set hour(value:String):void
		{
			_hour = value;
			dispatchEvent(new Event("changeHour"));
		}

		public function get minutes():String
		{
			return _minutes;
		}

		public function set minutes(value:String):void
		{
			_minutes = value;
			dispatchEvent(new Event("changeMinutes"));
		}

		public function get second():String
		{
			return _second;
		}

		public function set second(value:String):void
		{
			_second = value;
			dispatchEvent(new Event("changeSecond"));
		}

	}

}


代码应该会好懂,这里ModelLocator继承了EventDispatcher这个类,继承这个类的原因是ModelLocator需要用dispatchEvent发消息出去。再来看一下Controller.as这个类:

package clock.control
{

	import flash.utils.Timer;
	import flash.events.TimerEvent;

	import clock.model.ModelLocator;

	public class Controller
	{

		private var _model:ModelLocator;
		private var _timer:Timer;

		public function Controller(model:ModelLocator):void
		{
			_model = model;
		}

		public function startTime():void
		{
			_timer = new Timer(1000,0);
			_timer.addEventListener(TimerEvent.TIMER,timerHandler);
			_timer.start();
		}

		private function timerHandler(event:TimerEvent):void
		{
			var nowDate:Date = new Date();
			_model.hour = nowDate.getHours() > 9 ? String(nowDate.getHours()):"0" + nowDate.getHours();
			_model.minutes = nowDate.getMinutes() > 9 ? String(nowDate.getMinutes()):"0" + nowDate.getMinutes();
			_model.second = nowDate.getSeconds() > 9 ? String(nowDate.getSeconds()):"0" + nowDate.getSeconds();
		}

	}
}


这个类中我们用到了Timer类,因为我们用的是时钟,所以需要一个定时器,Timer是一个很好的定时器,Timer(1000,0),这里 1000是指1000毫秒,就是1秒钟触发一次定时钟,0表示次数,这里0是无限次,如果是大于0的数就是这个数的次数。侦听 TimerEvent.TIMER事件就是1秒钟去执行一次timerHandler方法,timerHandler方法的功能是得到当前的时间然后去改变_model里面的值,再看一下ModelLocator.as里面的代码,当hour,minutes,second的值改变的时候就会去发消息出去,那么谁来侦听这些消息呢,当然是View,现在来看下View.as:
package clock.view
{

	import flash.display.Sprite;
	import flash.events.Event;
	import flash.text.TextField;

	import clock.model.ModelLocator;
	import clock.control.Controller;

	public class View extends Sprite
	{

		private var _model:ModelLocator;
		private var _controller:Controller;
		private var time_txt:TextField;

		public function View(model:ModelLocator,controller:Controller):void
		{
			_model = model;
			_controller = controller;
			time_txt = new TextField();
			addChild(time_txt);
			_model.addEventListener("changeHour",changeTimeHandler);
			_model.addEventListener("changeMinutes",changeTimeHandler);
			_model.addEventListener("changeSecond",changeTimeHandler);

			_controller.startTime();
		}

		private function changeTimeHandler(event:Event):void
		{
			time_txt.text = _model.hour + " : " + _model.minutes + " : " + _model.second;
		}

	}
}
在View里面,侦听了_model的事件,所以当收到数据改变的消息后,将_model的数据显示到文本框中。要使程序运行,我们现加一个文档类:
package clock
{

	import flash.display.Sprite;

	import clock.model.ModelLocator;
	import clock.control.Controller;
	import clock.view.View;

	public class Clock extends Sprite
	{

		private var _model:ModelLocator;
		private var _controller:Controller;
		private var _view:View;

		public function Clock():void
		{
			_model = new ModelLocator();
			_controller = new Controller(_model);
			_view = new View(_model,_controller);
			addChild(_view);
		}

	}
}


在文档类中建立了ModelLocator、Controller、View的实例,ModelLocator产生的实例被传到了 Controller和View中,这样就保证了Controller和View使用是相同的ModelLocator。这里作一个总结,Controller是一个控制者,它去改变ModelLocator,ModelLocator的数据被改变后去更新View,使我们能看到数据。如果界面上有一些按钮交互,那么就应该是Controller去响应View里的按钮交互,响应后去通过一些操作后改变 ModelLocator,ModelLocator数据改变后通知View去改变界面。


内容概要:本研究聚焦于绿电直连型电氢氨园区的优化运行,提出一种集成绿色电力直接供给、电解水制氢及氢气合成氨工艺的综合能源系统架构。通过建立包含风光发电、电解槽、氨合成反应器、储氢罐、电网交互及多类型负荷在内的系统模型,综合考虑绿电直供优先、能量梯级利用与多能互补原则,构建以系统综合运行成本最小化为目标的优化调度模型。研究采用Matlab与Python工具进行算法求解和仿真分析,利用实际气象与负荷数据完成案例验证,评估了不同运行策略下系统的经济性、可再生能源消纳能力与碳减排效益,为新型电氢氨一体化园区的规划与运行提供了理论依据和技术支撑。; 适合人群:具备一定电力系统、新能源或化工背景的研究生、科研人员及从事综合能源系统规划与优化工作的工程技术人员。; 使用场景及目标:①用于科研学习,理解电-氢-氨多能换系统的建模与优化方法;②为工业园区的低碳化、智能化改造提供技术参考与决策支持;③作为开发类似综合能源管理系统的理论基础。; 阅读建议:此资源包含完整的模型代码、数据与论文,使用者应结合代码仔细研读论文中的模型构建部分,重点关注目标函数与约束条件的设计逻辑,并尝试修改参数进行仿真,以深入掌握优化算法在实际系统中的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值