MVC Java实例

转发请注明原文:http://blog.csdn.net/qq_34911465/article/details/62248450

MVC JAVA

今天用MVC的方法写完一个Java的程序,程序的功能是输入一些数字,然后将偶数和奇数挑出来。
程序的界面是这样的:
这里写图片描述
以下部分是程序的解析。

MVC是什么

MVC是模型(Model)、视图(View)、控制器(Controller)的缩写,简单而言就是把用户的界面,数据模型还有操作控制的部分分离开来,达到一种解耦合的效果,尽量减少不同的方面对其他的影响,这样在更改其中一部分时不会对其他部分造成影响,降低程序的维护难度。

View

视图,因为对Java语言中的swing和awt编程不是很熟悉,而本来打算直接使用命令行来做视图的,但是命令行的更新效果不明显,所以还是使用swing和awt来编程,一边复习一边编写。
View层的代码如下:

import java.awt.*;
import javax.swing.JFrame;
import java.util.ArrayList;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JLabel;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class View {
  private static JFrame frame;
  private JTextField[] text;
  private JLabel[] textEven;
  private JLabel[] textOdd;
  private JButton sure;
  private Observer observer;

  public View(){
    super();
    initView();
    initListener();
  }
  //初始化界面
  public void initView(){
    frame = new JFrame("Number");
    text = new JTextField[10];
    sure = new JButton("test");
    frame.setSize(360,150);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    //Below is where you input the number
    Box vertical = Box.createVerticalBox();
    Box horizontal = Box.createHorizontalBox();
    for(int i = 0 ; i < 10 ; i++){
      text[i] = new JTextField("");
      horizontal.add(text[i]);
    }
    horizontal.add(sure);
    vertical.add(horizontal);
    frame.add(vertical);

    //Below is where show the result
    JLabel evenLabel = new JLabel("Below is the even number:");
    JLabel oddLabel = new JLabel("Below is the odd number:");
    textEven = new JLabel[10];
    textOdd = new JLabel[10];
    Box evenH = Box.createHorizontalBox();
    Box oddH = Box.createHorizontalBox();
    for(int i = 0 ; i < 10 ; i++){
      textEven[i] = new JLabel(" ");
      evenH.add(textEven[i]);
    }
    for(int i = 0 ; i < 10 ; i++){
      textOdd[i] = new JLabel(" ");
      oddH.add(textOdd[i]);
    }
    vertical.add(evenLabel);
    vertical.add(evenH);
    vertical.add(oddLabel);
    vertical.add(oddH);
  }
  public void initListener(){
    //turn to calculate
    sure.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent e){
      //触发信号
        observer = Controller.getInstance();
        observer.updateSignal(1);
      }
    });
  }

  public void setVisible(boolean flag){
    frame.setVisible(flag);
  }
//上传视图中的数据
  public ArrayList<Data> uploadData(){
    Data data;
    ArrayList<Data> list = new ArrayList<Data>();
    for(int i = 0 ; i < 10 ; i++){
      data = new Data(Integer.parseInt(text[i].getText()));
      list.add(data);
    }
    return list;
  }
  //更新视图
  public void updateView(ArrayList<Data> evenList,ArrayList<Data> oddList){
    for(int i = 0 ; i < 10 ; i++){
      textEven[i].setText(" ");
      textOdd[i].setText(" ");
    }
    if(evenList!=null)
    for(int i = 0,len = evenList.size(); i < len ; i++){
      textEven[i].setText(" "+evenList.get(i).getNum()+" ");
    }
    if(oddList!=null)
    for(int i = 0,len = oddList.size(); i < len ; i++){
      textOdd[i].setText(" "+oddList.get(i).getNum()+" ");
    }
  }
}
Model

模型,保存数据
首先是数据

public class Data{
  private int num;
  public Data(){};
  public Data(int n){num = n;}
  public void setNum(int n){
    num = n;
  }
  public int getNum(){
    return num;
  }
  public boolean isEven(){
    return (num%2==0);
  }
}

数据模型类

import java.util.ArrayList;
public class Model{
  private ArrayList<Data> evenList;
  private ArrayList<Data> oddList;
  public Model(){
    init();
  }
  public void init(){
    evenList = new ArrayList<Data>();
    oddList = new ArrayList<Data>();
  }
  public void clear(){
    evenList.clear();
    oddList.clear();
  }
  public void addToEvenList(Data data){
    evenList.add(data);
  }
  public void addToOddList(Data data){
    oddList.add(data);
  }
  public ArrayList<Data> getEvenList(){
    return evenList;
  }
  public ArrayList<Data> getOddList(){
    return oddList;
  }
}
Controller

控制器,对数据进行处理,以及控制视图的更新

import java.lang.Exception;
import java.util.ArrayList;
public class Controller implements Observer{
  private static Controller instance = new Controller();
  private View view;
  private Model model;
  public Controller(){
    init();
  }
  public void init(){
    view = new View();
    model = new Model();
    view.setVisible(true);
  }

  public static Controller getInstance(){
    return instance;
  }
  public void addData(Data data){
    if(data!=null&&data.isEven())model.addToEvenList(data);
    else if(data!=null&&!data.isEven())model.addToOddList(data);
  }
  public void setList(ArrayList<Data> list){
    model.clear();
    for(int i = 0 , len = list.size();i < len ; i++){
      addData(list.get(i));
    }
  }
  //接受到信号就会加载视图中的数据,然后将数据处理后保存到模型中
  public void updateSignal(int n){
    if(n==1){
      ArrayList<Data> list = view.uploadData();
      setList(list);
      ArrayList<Data> eList = model.getEvenList();
      ArrayList<Data> oList = model.getOddList();
      view.updateView(eList,oList);
    }
  }
}

单这样还是无法让程序正常的运行,所以我们需要在视图中添加一个观察者,使用观察者来探测视图的变化。

public interface Observer {
  public void updateSignal(int n);
}

这里我让Controller继承了观察者,这样观察者就可以直接操作Controller中的updateSignal方法,来进行视图的更新。
接下来就是main函数,使用一个另外的类

import java.lang.Exception;
public class MyMain{
  private Controller controller;
  public MyMain(){
    init();
  }
  public void init(){
    controller = Controller.getInstance();
  }
  public static void main(String[] args){
    try{
      MyMain m = new MyMain();
    }catch(Exception e){
      System.out.println(e);
    }
  }
}

测试结果如下:
这里写图片描述
输入整型数据后按test键,就会输出下图的结果:
这里写图片描述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值