MVC设计模式--HeadFirst学习
来源:互联网 发布:java编程面试题 编辑:程序博客网 时间:2024/05/22 15:50
1、模型视图设计器模式
是可重用性很高的基于多个模式创建出来的复合模式,其中模型负责数据状态和逻辑、视图负责显示和交互、控制器负责传达视图要求模型需要执行的命令,而模型和视图之间是观察者模式关系、视图和控制器之间是策略模式关系,视图本身通过组合模式实现。
2、例子代码
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows.Forms;namespace MVCPattern{ /// <summary> /// 模型 /// </summary> public interface BeatModelInterface { void initialize(); void on(); void off(); void setBMP(int bmp); int getBMP(); void registerBeatObserver(BeatObserver observer); void registerBMPObserver(BMPObserver observer); } public class BeatModel : BeatModelInterface { private List<BeatObserver> m_BeatObservers; private List<BMPObserver> m_BMPObservers; private int m_bmp; private bool m_IsOn; public BeatModel() { m_BeatObservers = new List<BeatObserver>(); m_BMPObservers = new List<BMPObserver>(); initialize(); } #region BeatModelInterface 成员 public void initialize() { m_bmp = 90; m_IsOn = false; Console.WriteLine("DJ正在初始化...."); } public void on() { m_IsOn = true; foreach (var observer in m_BeatObservers) { observer.setStartEnable(false); observer.setStopEnable(true); } } public void off() { m_IsOn = false; foreach (var observer in m_BeatObservers) { observer.setStartEnable(true); observer.setStopEnable(false); } } public void setBMP(int bmp) { m_bmp = bmp; foreach (var observer in m_BMPObservers) { observer.setBMPValue(bmp); } } public int getBMP() { return m_bmp; } public void registerBeatObserver(BeatObserver observer) { m_BeatObservers.Add(observer); } public void registerBMPObserver(BMPObserver observer) { m_BMPObservers.Add(observer); } #endregion }}
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace MVCPattern{ /// <summary> /// 控制器 /// </summary> public interface ControllerInterface { void start(); void stop(); void increaseBMP(); void decreaseBMP(); void setBMP(int bmp); } public class BeatController : ControllerInterface { private BeatModelInterface m_model; public BeatController(BeatModelInterface model) { m_model = model; } #region ControllerInterface 成员 public void start() { m_model.on(); } public void stop() { m_model.off(); } public void increaseBMP() { m_model.setBMP(m_model.getBMP()+5); } public void decreaseBMP() { m_model.setBMP(m_model.getBMP() - 5); } public void setBMP(int bmp) { m_model.setBMP(bmp); } #endregion }}
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using DevExpress.XtraBars;namespace MVCPattern{ /// <summary> /// 视图 /// </summary> public interface BeatObserver { void setStartEnable(bool enable); void setStopEnable(bool enable); } public interface BMPObserver { void setBMPValue(int bmp); } public partial class View : Form, BeatObserver, BMPObserver { private BeatModelInterface m_model; private ControllerInterface m_controller; public View(BeatModelInterface model,ControllerInterface controller) { InitializeComponent(); m_model = model; m_controller = controller; m_model.registerBeatObserver(this); m_model.registerBMPObserver(this); startMenuItem.ItemClick += on_startMenuItemClick; stopMenuItem.ItemClick += on_stopMenuItemClick; setBMP.ItemClick += on_setBMPItemClick; minusControl.ItemClick += on_MinusControlClick; PlusControl.ItemClick += on_PlusControlClick; stopMenuItem.Enabled = false; } private void on_startMenuItemClick(object sender, ItemClickEventArgs e) { m_controller.start(); } private void on_stopMenuItemClick(object sender, ItemClickEventArgs e) { m_controller.stop(); } private void on_setBMPItemClick(object sender, ItemClickEventArgs e) { m_controller.setBMP(int.Parse(BMPEdit.EditValue.ToString())); } private void on_MinusControlClick(object sender, ItemClickEventArgs e) { m_controller.decreaseBMP(); } private void on_PlusControlClick(object sender, ItemClickEventArgs e) { m_controller.increaseBMP(); } #region BeatObserver 成员 public void setStartEnable(bool enable) { startMenuItem.Enabled = enable; } public void setStopEnable(bool enable) { stopMenuItem.Enabled = enable; } #endregion #region BMPObserver 成员 public void setBMPValue(int bmp) { string defaultCap = "Current BMP:"; bpmOutputLabel.Caption = defaultCap + bmp.ToString(); beatBar.EditValue = bmp; BMPEdit.EditValue = bmp; } #endregion }}
using System;using System.Collections.Generic;using System.Linq;using System.Windows.Forms;namespace MVCPattern{ static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); BeatModelInterface pModel = new BeatModel(); ControllerInterface pController = new BeatController(pModel); Application.Run(new View(pModel, pController)); } }}
3、效果
0 0
- MVC设计模式--HeadFirst学习
- HeadFirst 设计模式学习笔记14——MVC分析
- HeadFirst 设计模式学习笔记10——MVC分析
- 【HeadFirst 设计模式学习笔记】13 MVC分析
- 设计模式(Headfirst)学习
- Command设计模式-HeadFirst学习
- Adapter设计模式-HeadFirst学习
- HeadFirst设计模式学习笔记
- HeadFirst设计模式学习之组合模式
- 《HeadFirst 设计模式》学习笔记(一)
- HeadFirst设计模式
- HeadFirst -------- 设计模式要点
- Headfirst设计模式 整理
- HeadFirst 设计模式 总
- HeadFirst设计模式
- HeadFirst 设计模式 笔记
- Headfirst-设计模式
- HeadFirst设计模式 读书笔记
- Intellij IDEA使用入门
- 无符号数tips
- 文章标题
- 黑马程序员_多态
- Struts2_学习笔记(一)--------学习工具下载、HelloWorld、运行机制
- MVC设计模式--HeadFirst学习
- Struts2_学习笔记(二)--------Namespace、Action、Path、ActionMethod_DMI、ActionWildcard
- Mybatis3源码分析(三):解析mapper的xml配置文件
- 华为光猫破解日记
- 54,对象的存储细节
- 在CentOS 7.0中配置svn自动更新出现的问题
- 彻底解决_OBJC_CLASS_$_某文件名", referenced from:问题
- 彻底解决:@synthesize of 'weak' property is only allowed in ARC or GC mode :问题
- 55,成员变量,全局变量与局部变量的区别