Java 使用MVC结构
什么是MVC?
//模型视图控制器(Model-View-Controller)
MVC是一种先进的设计结构,它的目的就是以会话形式提供GUI支持
MVC是一种通过3各不同部分构造一个软件或组件的思想办法
- 模型(model)//用于存储数据对象
- 视图(view)//为模型提供数据显示的对象
- 控制器(controller)//用于处理用户的交互工作
简单来说MVC是一种思想,通过MVC结构可以使程序更具有对象化的特性,也更容易维护,为用户提供一个视图,以及及时的信息反馈
通过一个求三角面积的例子
首先创建一个三角形的类(模型)
public class Triangle { //三角形模型
double sideA,sideB,sideC; //三边
boolean isTriangle; //是否为三角形
public void setSideA(double sideA) { //设置边长
this.sideA = sideA;
}
public void setSideB(double sideB) {
this.sideB = sideB;
}
public void setSideC(double sideC) {
this.sideC = sideC;
}
public boolean isTriangle() {
if(sideA + sideB > sideC && sideA + sideC > sideB && sideC + sideB > sideA ){
isTriangle = true;
}
return isTriangle;
}
public double getResult() {
if (this.isTriangle()){
double p = (sideA + sideB + sideC)/2.0;
double S = Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC)); //用海伦公式求三角形面积
return S;
}
else{ //一定要有else,否则不是三角形时就没有返回了
return Double.NaN; //NOT A NUMBER
}
};
}
然后创建的就是视图(view)
import javax.swing.*;
import java.awt.*;
public class myWindow extends JFrame {
Triangle triangle; //模型
Controller controller; //控制器
JLabel jLabelA,jLabelB,jLabelC;
JTextField jTextFieldA,jTextFieldB,jTextFieldC;
JButton jButton;
JTextArea jTextArea;
myWindow(){
setBounds(300,300,500,500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
init();
validate();
}
void init(){
triangle = new Triangle();
controller = new Controller();
controller.setView(this); //重要的一步
JPanel jPanel = new JPanel();
jPanel.setBackground(new Color(0x366728));
jLabelA = new JLabel("边A");
jPanel.add(jLabelA);
jTextFieldA = new JTextField(7);
jPanel.add(jTextFieldA);
jLabelB = new JLabel("边B");
jPanel.add(jLabelB);
jTextFieldB = new JTextField(7);
jPanel.add(jTextFieldB);
jLabelC = new JLabel("边C");
jPanel.add(jLabelC);
jTextFieldC = new JTextField(7);
jTextFieldC.addActionListener(controller);
jPanel.add(jTextFieldC);
jButton = new JButton("计算面积");
jButton.addActionListener(controller);
jPanel.add(jButton);
add(jPanel,BorderLayout.NORTH); //设置默认布局的顶部
jTextArea = new JTextArea();
add(jTextArea,BorderLayout.CENTER);
}
}
最后就是创建控制器,也就是实现了某个接口的类
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Controller implements ActionListener {
myWindow view;
public void setView(myWindow view) {
this.view = view;
}
@Override
public void actionPerformed(ActionEvent actionEvent) {
double SideA,SideB,SideC;
try{
SideA = Double.parseDouble(view.jTextFieldA.getText());
SideB = Double.parseDouble(view.jTextFieldB.getText());
SideC = Double.parseDouble(view.jTextFieldC.getText());
view.triangle.setSideA(SideA);
view.triangle.setSideB(SideB);
view.triangle.setSideC(SideC);
double result = view.triangle.getResult();
view.jTextArea.append("三角形"+SideA+","+SideB+","+SideC+"的面积是"+result+"\n");
}
catch (Exception e){
view.jTextArea.append("请输入数字");
}
}
}
运行效果图
几个要特别注意的点
- 知道三角形的三边求面积可以用海伦公式
- 要判断是否为三角形
- 设置视图时记得要
controller.setView(this); //重要的一步
CSS
JavaScript
JavaScript 对象构造器
JavaScript 对象原型
CET4P166
clarify
decade
expression
vigorous
vision
dimension
unity
exact
mercy
via