设计模式之MVC

本文介绍了MVC设计模式的组成部分及其职责,包括模型、视图和控制器的详细功能。模型处理复杂的数据和逻辑,视图仅负责显示,控制器则控制交互。文章还探讨了在MVC中如何应用观察者、工厂、策略和适配器模式,以实现更灵活的代码结构。
摘要由CSDN通过智能技术生成

什么是MVC

MVC三个单词分别是model(模型)、view(视图)、control(控制),MVC设计模式的特点就是把模型、视图、控制三个部分的代码分开写,使得各个部分最大限度地实现松耦合,视图部分持有模型部分和控制部分的引用,控制部分持有视图部分和模型部分的引用,而模型部分不持有它们的引用。如果要实现模型对视图的影响,可以使用观察者模式,在模型中注册视图的观察者对象,当有信息更新的时候可以通知所有观察者。
下图即MVC的基本模型:
在这里插入图片描述
下面通过MVC设计模式实现一个简单的节拍器。

视图(V)

1、构造方法。视图的构造方法传入模型和控制器的引用,并且调用模型的registerObserver方法注册称为观察者。这里用到了两个视图,于是实现了两个观察者接口,都有update方法,在“主题”更新的时候可以得到通知。

   /**
     * 构造方法,获得M和C的引用
     * 在模型中注册,称为模型的观察者,以便获取数据更新的通知
     * @param model
     * @param controller
     */
	public DJView(BeatModelInterface model, ControllerInterface controller) {
   
		this.model = model;
		this.controller = controller;
		model.registerObserver((BeatObserver)this);
		model.registerObserver((BPMObserver)this);
	}
public interface BPMObserver {
   
	void updateBPM();			
}
public interface BeatObserver {
   
      void updateBeat();
}

2、视图持有的引用。在如下例子中我们可以发现,视图部分除了模型和控制器的引用,其他的都是组件的申明,代码十分干净,视图只负责显示。视图部分用到了组合模式,用户界面组合了嵌套的组件。

    BeatModelInterface model;//持有模型的引用
    ControllerInterface controller;//持有控制器的引用
    //申明所有显示组件
    JFrame viewFrame;
    JPanel viewPanel;
    BeatBar beatBar;
    JLabel bpmOutputLabel;
    JFrame controlFrame;
    JPanel controlPanel;
    JLabel bpmLabel;
    JTextField bpmTextField;
    JButton setBPMButton;
    JButton increaseBPMButton;
    JButton decreaseBPMButton;
    JMenuBar menuBar;
    JMenu menu;
    JMenuItem startMenuItem;
    JMenuItem stopMenuItem;

3、视图的创建代码。这部分代码实例化了组件,调用这个方法就可以使得视图显示出来。如果有按钮,可以直接实现监听器方法,按钮是用来触发控制器的方法的,这个在后面还会提到。

	/**
	 * 创建视图1,显示参数部分
	 * 调用这个方法实例化所有组件并创建视图
	 * 这段代码只管显示(不涉及任何逻辑)
	 */
	public void creatView(){
   
		viewPanel=new JPanel(new GridLayout(1, 2));
		viewFrame=new JFrame("View");
		viewFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		viewFrame.setSize(new Dimension(100, 80));
		bpmOutputLabel=new JLabel("offline", SwingConstants.CENTER);
		beatBar=new BeatBar();
		beatBar.setValue(0);
		JPanel bpmPanel=new JPanel(new GridLayout(2, 1));
		bpmPanel.add(beatBar);
		bpmPanel.add
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值