`
lindongxiao
  • 浏览: 47747 次
  • 性别: Icon_minigender_1
  • 来自: 泉州
社区版块
存档分类
最新评论

两种不同的实现mvc模式(1)

阅读更多
 view接口,供所有view 实现
java 代码
 
  1. public interface View {  
  2.     public void refreshContactView(String firstName, String lastName);  
  3. }  
model  java 代码 
  1. import java.util.ArrayList;  
  2. import java.util.Iterator;  
  3.   
  4. public class TextModel {  
  5.     private String firstName;  
  6.     private String lastName;  
  7.     
  8.     private ArrayList contactViews = new ArrayList();//用来存不同的视图的容器  
  9.       
  10.     public TextModel(){  
  11.         this(null);  
  12.     }  
  13.     public TextModel(View view){  
  14.         firstName = "";  
  15.         lastName = "";  
  16.           
  17.         if (view != null){  
  18.             contactViews.add(view);  
  19.         }  
  20.     }  
  21.     public void addContactView(View view){  
  22.         if (!contactViews.contains(view)){  
  23.             contactViews.add(view);  
  24.         }  
  25.     }  
  26.       
  27.     public void removeContactView(View view){  
  28.         contactViews.remove(view);  
  29.     }  
  30.   
  31.     public void updateModel(String newFirstName, String newLastName){  
  32.           
  33.             if (!isEmptyString(newFirstName)){  
  34.                 setFirstName(newFirstName);  
  35.             }  
  36.             if (!isEmptyString(newLastName)){  
  37.                 setLastName(newLastName);  
  38.             }  
  39.               
  40.             updateView();  
  41.         }  
  42.     private void updateView(){  
  43.         Iterator notifyViews = contactViews.iterator();  
  44.         while (notifyViews.hasNext()){  
  45.             ((View)notifyViews.next()).refreshContactView(firstName, lastName);  
  46.         }  
  47.     }  
  48.       
  49.     public String getFirstName(){ return firstName; }  
  50.     public String getLastName(){ return lastName; }  
  51.      
  52.       
  53.     public void setFirstName(String newFirstName){ firstName = newFirstName; }  
  54.     public void setLastName(String newLastName){ lastName = newLastName; }  
  55.      
  56.     private boolean isEmptyString(String input){  
  57.         return ((input == null) || input.equals(""));  
  58.     }  
  59. }  
用来修改的视图 构造里传入model ,同时启动控制器类
java 代码
 
  1. public class EditView extends JPanel implements View{  
  2.   
  3.     private static final String UPDATE_BUTTON = "Update";  
  4.   
  5.     private static final String EXIT_BUTTON = "Exit";  
  6.   
  7.     private static final String CONTACT_FIRST_NAME = "First Name  ";  
  8.   
  9.     private static final String CONTACT_LAST_NAME = "Last Name  ";  
  10.   
  11.     private static final int FNAME_COL_WIDTH = 25;  
  12.   
  13.     private static final int LNAME_COL_WIDTH = 40;  
  14.   
  15.     private EditController controller;  
  16.   
  17.     private JLabel firstNameLabel, lastNameLabel;  
  18.   
  19.     private JTextField firstName, lastName;  
  20.   
  21.     private JButton update, exit;  
  22.   
  23.     public EditView(TextModel model) {  
  24.           
  25.         controller = new EditController(model,this);  
  26.         createGui();  
  27.     }  
  28.   
  29.     public void createGui() {  
  30.         update = new JButton(UPDATE_BUTTON);  
  31.         exit = new JButton(EXIT_BUTTON);  
  32.   
  33.         firstNameLabel = new JLabel(CONTACT_FIRST_NAME);  
  34.         lastNameLabel = new JLabel(CONTACT_LAST_NAME);  
  35.   
  36.         firstName = new JTextField(FNAME_COL_WIDTH);  
  37.         lastName = new JTextField(LNAME_COL_WIDTH);  
  38.   
  39.         JPanel editPanel = new JPanel();  
  40.         editPanel.setLayout(new BoxLayout(editPanel, BoxLayout.X_AXIS));  
  41.   
  42.         JPanel labelPanel = new JPanel();  
  43.         labelPanel.setLayout(new GridLayout(01));  
  44.   
  45.         labelPanel.add(firstNameLabel);  
  46.         labelPanel.add(lastNameLabel);  
  47.   
  48.         editPanel.add(labelPanel);  
  49.   
  50.         JPanel fieldPanel = new JPanel();  
  51.         fieldPanel.setLayout(new GridLayout(01));  
  52.   
  53.         fieldPanel.add(firstName);  
  54.         fieldPanel.add(lastName);  
  55.   
  56.         editPanel.add(fieldPanel);  
  57.   
  58.         JPanel controlPanel = new JPanel();  
  59.         controlPanel.add(update);  
  60.         controlPanel.add(exit);  
  61.         update.addActionListener(controller);  
  62.         exit.addActionListener(new Handler());  
  63.   
  64.         setLayout(new BorderLayout());  
  65.         add(editPanel, BorderLayout.CENTER);  
  66.         add(controlPanel, BorderLayout.SOUTH);  
  67.     }  
  68.   
  69.     public Object getUpdateRef() {  
  70.         return update;  
  71.     }  
  72.   
  73.     public String getFirstName() {  
  74.         return firstName.getText();  
  75.     }  
  76.   
  77.     public String getLastName() {  
  78.         return lastName.getText();  
  79.     }  
  80.   
  81.     public void refreshContactView(String newFirstName, String newLastName) {  
  82.         // TODO 自动生成方法存根  
  83.         firstName.setText(newFirstName);  
  84.         lastName.setText(newLastName);  
  85.   
  86.     }  
  87.   
  88.     private class Handler implements ActionListener {  
  89.         public void actionPerformed(ActionEvent event) {  
  90.             System.exit(0);  
  91.         }  
  92.     }  
  93.   
  94. }  
控制类,把model类和View类注册进来,通过这个类去改变model,model改变时
 * 调用自身的update方法,更新view
java 代码
 
  1. import java.awt.event.ActionEvent;  
  2. import java.awt.event.ActionListener;  
  3.   
  4. public class EditController implements ActionListener {  
  5.     private TextModel model;  
  6.     private EditView view;  
  7.     
  8.     public EditController(TextModel model2, EditView view2) {  
  9.         // TODO 自动生成构造函数存根  
  10.         view = view2;  
  11.         model = model2;  
  12.     }  
  13.   
  14.     public void actionPerformed(ActionEvent evt){  
  15.         Object source = evt.getSource();  
  16.         if (source == view.getUpdateRef()){  
  17.             updateModel();  
  18.         }  
  19.     }  
  20.     private void updateModel(){  
  21.         String firstName = null;  
  22.         String lastName = null;  
  23.         if (view.getFirstName()!=null){  
  24.             firstName = view.getFirstName();  
  25.         }  
  26.         if (view.getLastName()!=null){  
  27.             lastName = view.getLastName();  
  28.         }  
  29.         model.updateModel( firstName, lastName);  
  30.     }  
  31. }  
用来显示model数据视图
java 代码
 
  1. import java.awt.BorderLayout;  
  2. import javax.swing.JPanel;  
  3. import javax.swing.JScrollPane;  
  4. import javax.swing.JTextArea;  
  5.   
  6. class DisplayView extends JPanel implements View {  
  7.     private JTextArea display;  
  8.   
  9.     public DisplayView() {  
  10.         createGui();  
  11.     }  
  12.   
  13.     public void createGui() {  
  14.         setLayout(new BorderLayout());  
  15.         display = new JTextArea(1040);  
  16.         display.setEditable(false);  
  17.         JScrollPane scrollDisplay = new JScrollPane(display);  
  18.         this.add(scrollDisplay, BorderLayout.CENTER);  
  19.     }  
  20.   
  21.     public void refreshContactView(String newFirstName, String newLastName) {  
  22.         display.setText("UPDATED CONTACT:\nNEW VALUES:\n" + "\tName: "  
  23.                 + newFirstName + " " + newLastName + "\n");  
  24.     }  
  25.   
  26. }  
整个mvc用到model controller view 都是联系起来的
 * model-->view
 * view--->model
 * controller把它们联系起来
java 代码
 
  1. import java.awt.event.WindowAdapter;  
  2. import java.awt.event.WindowEvent;  
  3. import java.io.Serializable;  
  4. import javax.swing.JFrame;  
  5. import javax.swing.JPanel;  
  6.   
  7. public class RunMVCPattern {  
  8.       
  9.     public static void main(String [] arguments){     
  10.          
  11.         TextModel model = new TextModel();  
  12.           
  13.         EditView editorView = new EditView(model);///增加视图  
  14.         model.addContactView(editorView);  
  15.         createGui(editorView, "Contact Edit Window");  
  16.           
  17.         System.out.println("Creating DisplayView");  
  18.         DisplayView displayView = new DisplayView();  
  19.         model.addContactView(displayView);  
  20.         createGui(displayView, " Display Window");  
  21.     }  
  22.       
  23.     private static void createGui(JPanel contents, String title){  
  24.         JFrame applicationFrame = new JFrame(title);  
  25.         applicationFrame.getContentPane().add(contents);  
  26.         applicationFrame.pack();//自动适应大小  
  27.         applicationFrame.setVisible(true);  
  28.     }  
  29. }  
分享到:
评论

相关推荐

    运用MVC模式及观察者模式的java小程序

    在这个名为“运用MVC模式及观察者模式的java小程序”的项目中,我们重点探讨了两种经典的设计模式:Model-View-Controller(MVC)模式和Observer(观察者)模式。这两种模式在JavaWeb开发中扮演着至关重要的角色。 ...

    Java Web实验六 采用 DAO 模式实现对数据库的访问方法, 利用 Servlet 实现 MVC 模式

    本实验旨在通过这两种模式来实现对数据库的高效访问,并利用Servlet技术构建一个完整的Web应用。 首先,DAO模式是一种用于分离业务逻辑层与数据访问层的模式。在该模式中,DAO类作为数据存取的接口,负责处理与...

    java中MVC设计模式

    * 高度灵活性:MVC 模式可以轻松地更换 View 或 Model,实现不同的显示方式和数据存储方式。 * 易于开发和维护:MVC 模式将应用程序分离成三个部分,每个部分都可以独立开发和维护,从而提高了开发效率和维护效率。 ...

    mvc模式(软件架构思想)

    - **Java开发WebApplication**:使用如Spring MVC、Struts等框架实现MVC模式,处理Web请求和响应。 - **.NET开发WebApplication**:通过ASP.NET MVC框架,构建动态和响应式的Web应用。 - **PHP开发WebApplication**...

    jsp实验-用java实现MVC模式的管理系统

    【标题】"jsp实验-用java实现MVC模式的管理系统"揭示了本次实验的核心内容,即使用Java语言和JSP技术构建一个基于MVC(Model-View-Controller)设计模式的管理信息系统。这个系统旨在帮助初学者理解并实践MVC模式在...

    java 设计模式 mvc模式 单例模式 代理 工厂 简单工厂

    在Java实现中,有静态代理和动态代理两种方式。静态代理是由开发者显式创建代理类,而动态代理则利用Java的动态代理API在运行时动态生成代理类。 工厂模式是一种创建型设计模式,它提供了一种创建对象的统一接口,...

    java 两层mvc模式

    总的来说,Java两层MVC模式是一种简洁而实用的架构选择,尤其适用于对复杂性要求不高的项目。然而,为了保证代码的可读性、可维护性和可扩展性,开发者在实际应用中应考虑适当的模块化和设计原则,以确保代码质量。

    MVC模式在Java Web开发中的应用及实现.pdf

    为了克服模式1的局限性,模式2采用了基于MVC的设计模式,通过不同的组件分别实现应用逻辑、数据处理和显示逻辑。在这种模式下,Model通常由JavaBean对象组成,用于封装商业规则和存储数据。View则使用JSP页面来显示...

    JSP小项目MVC模式资源

    - Model1和Model2是JSP中两种不同的MVC实现方式。Model1将业务逻辑和表现层混合在一起,而Model2(也就是MVC模式的典型实现)强调了组件间的分离。 - Spring MVC是一个流行的Java框架,它简化了在JSP中实现MVC模式...

    mvc模式画圆JAVA实现

    **MVC模式**,全称为Model-View-Controller(模型-视图-控制器),是一种广泛应用于软件开发,尤其是Web应用开发的设计模式。该模式的主要目的是将业务逻辑、数据处理和用户界面进行分离,使得各部分可以独立开发和...

    简单的登录MVC模式

    【标题】"简单的登录MVC模式"涉及到的是Web开发中的一种常见设计模式——Model-View-Controller(模型-...同时,通过查看源代码,还可以学习到具体的编程语言(如PHP、Java、ASP.NET等)在实现MVC模式时的语法和技巧。

    MVC设计模式范例

    **MVC设计模式详解** ...在本例子中,通过实现一个简单的球体计算应用,我们可以深入理解MVC模式的各个组成部分以及它们之间的协作方式。通过扩展MVC模式,我们可以构建出更复杂且灵活的应用系统。

    MVC模式实例

    MVC 模式是一种软件架构模式,它将应用程序分为三个主要部分:Model、View 和 Control。这种模式的主要目的是将业务逻辑层、表示层和应用逻辑层分离,以提高代码的可维护性和重用性。 在这个实例中,我们将使用 MVC...

    MVC和MVP模式项目实现

    在软件开发领域,MVC(Model-View-Controller)和MVP(Model-View-Presenter)是两种常见的设计模式,用于构建用户界面。这两种模式都致力于分离关注点,提高代码的可测试性和可维护性。这里我们将深入探讨这两种...

    mvc模式的基本形式应用

    压缩包中的"SampleCode"可能包含了实现MVC模式的示例代码。通常,这些代码会包含以下部分: 1. **Model类**:如`UserModel.java`,可能包含用户数据的属性和方法,用于数据的获取和处理。 2. **Controller类**:如`...

    Android学习之浅谈对MVC模式和MVP模式的理解

    本文将深入探讨两种常见的设计模式——MVC(Model-View-Controller)和MVP(Model-View-Presenter),并结合实际的TestMVP项目,解析它们在实际开发中的运用。 首先,我们来了解一下MVC模式。MVC是一种软件设计模式...

    MVC三层架构+DAO工厂模式进行JAVA WEB开发

    在Java Web开发中,MVC(Model-View-Controller)三层架构和DAO(Data Access Object)工厂模式是两种常见的设计模式,它们对于构建高效、可维护的系统至关重要。本项目结合这两种模式,旨在提高代码组织的清晰度和...

    Qt使用MVC、数据库单例模式实现登录注册

    SQLite3则是一个轻量级的嵌入式数据库,而MVC和单例模式是软件设计中的两种重要概念。 首先,让我们理解MVC设计模式。MVC将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。模型...

    mvc模式图片的实现

    在给定的文件中,我们看到了如何在MVC模式中处理图像数据的具体实现。 ### 一、`ImageResult`类的实现 `ImageResult`是MVC框架中用于返回图像数据的一种自定义结果类型。在上述代码片段中,`ImageResult`继承自`...

Global site tag (gtag.js) - Google Analytics