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
原创粉丝点击