MVC风格
§模型-视图-控制器风格常被简称为MVC风格
§组件:模型、视图、控制器
§连接件:显式调用、隐式调用、其他机制(例如:Http协议)
工作机制:
Model:
§模型的职责
–负责数据存取
–负责业务逻辑实现
–负责数据验证
§模型:模型是应用程序的核心。它封装内核数据与状态,对模型的修改将扩散到所有视图中。所有需要从模型获取信息的对象都必须注册为模型的视图。
§在事件驱动系统,当信息发生改变,模型通知观察者(observers) (通常是视图),从而引起视图反应。
View:
§视图的职责:
–获取用户输入
–向controller发送处理请求
–接收来自Controller的反馈
–将model的处理结果显示给用户
§一个model可能有多个View
Controller:
§控制器职责:
–接收来自客户的请求
–调用model执行
–调用View显示执行结果
§控制器:控制器是提供给用户进行操作的接口。每个视图与一个控制器组件相关联。控制器接收用户的输入,通常是鼠标移动、键盘输入等。输入事件翻译成服务请求,送到模型或视图。用户只通过控制器与系统交互。
§两个主要分离:
–模型与界面分离
–控制器与视图分离
§优点:
–将各方面问题分解开来考虑,简化了系统设计,保证了系统的可扩展性。
–改变界面不影响应用程序的功能内核,使得系统易于演化开发,可维护性好。
–同一信息可以有不同的展现方式。
–业务逻辑更易测试
程序:
模型类CarModel封装二手车软件的业务逻辑部分,包括核心数据以及tell()方法(将状态的改变通知视图类)
import java.io.*;
import java.net.URL;
import java.net.URI;
import javax.swing.*;
importjava.util.*;
public classCarModel{
private String[] carNameList;
privateURL imgURL;
privateURL carFileUrl;
privateImageIcon imgIcon;
private String carSelected;
private String bitPrice;
static final String CARFILES ="CarFiles/";
static final String CARIMAGES ="CarImages/";
public CarModel(){
carNameList=new String[200];
}
public void setCarList(String[] cars){
carNameList = cars;
}
public String[] getCarList(){
return carNameList;
}
public void setSelectedCar(String sCar){
carSelected = sCar;
}
publicString getSelectedCar(){
return carSelected;
}
publicvoid setBitPrice(String bPrice){
bitPrice = "";
bitPrice = bitPrice + bPrice;
}
public String getBitPrice(){
return bitPrice;
}
public void setupImageIcon(){
String iconStr = CARIMAGES + carSelected+".jpg";
imgIcon = createImageIcon(iconStr);
}
public ImageIcon getImageIcon(){
return imgIcon;
}
public void setCarFileURL(){
try{
String fileURLStr = CARFILES + carSelected+ ".html";
URI uri = (new File(fileURLStr)).toURI();
carFileUrl= uri.toURL();
&nbs