http://lindongxiao.iteye.com/admin/show/98810这里有另外一种实现,可以对比
view接口
java 代码
- public interface View {
- public void refreshContactView(String firstName, String lastName);
- }
java 代码
- import java.awt.BorderLayout;
- import java.awt.GridLayout;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
-
- import javax.swing.BoxLayout;
- import javax.swing.JButton;
- import javax.swing.JLabel;
- import javax.swing.JPanel;
- import javax.swing.JTextField;
- import mvcpattern1.EditController;
-
- public class EditView extends JPanel implements View{
-
- private static final String UPDATE_BUTTON = "Update";
-
- private static final String EXIT_BUTTON = "Exit";
-
- private static final String CONTACT_FIRST_NAME = "First Name ";
-
- private static final String CONTACT_LAST_NAME = "Last Name ";
-
- private static final int FNAME_COL_WIDTH = 25;
-
- private static final int LNAME_COL_WIDTH = 40;
-
- private EditController controller;
-
- private JLabel firstNameLabel, lastNameLabel;
-
- private JTextField firstName, lastName;
-
- private JButton update, exit;
-
- public EditView(TextModel model) {
- controller = new EditController(model,this);
- createGui();
- }
-
- public void createGui() {
- update = new JButton(UPDATE_BUTTON);
- exit = new JButton(EXIT_BUTTON);
-
- firstNameLabel = new JLabel(CONTACT_FIRST_NAME);
- lastNameLabel = new JLabel(CONTACT_LAST_NAME);
-
- firstName = new JTextField(FNAME_COL_WIDTH);
- lastName = new JTextField(LNAME_COL_WIDTH);
-
- JPanel editPanel = new JPanel();
- editPanel.setLayout(new BoxLayout(editPanel, BoxLayout.X_AXIS));
-
- JPanel labelPanel = new JPanel();
- labelPanel.setLayout(new GridLayout(0, 1));
-
- labelPanel.add(firstNameLabel);
- labelPanel.add(lastNameLabel);
-
- editPanel.add(labelPanel);
-
- JPanel fieldPanel = new JPanel();
- fieldPanel.setLayout(new GridLayout(0, 1));
-
- fieldPanel.add(firstName);
- fieldPanel.add(lastName);
-
- editPanel.add(fieldPanel);
-
- JPanel controlPanel = new JPanel();
- controlPanel.add(update);
- controlPanel.add(exit);
- update.addActionListener(controller);
- exit.addActionListener(new Handler());
-
- setLayout(new BorderLayout());
- add(editPanel, BorderLayout.CENTER);
- add(controlPanel, BorderLayout.SOUTH);
- }
-
- public Object getUpdateRef() {
- return update;
- }
-
- public String getFirstName() {
- return firstName.getText();
- }
-
- public String getLastName() {
- return lastName.getText();
- }
-
- public void refreshContactView(String newFirstName, String newLastName) {
- firstName.setText(newFirstName);
- lastName.setText(newLastName);
-
- }
-
- private class Handler implements ActionListener {
- public void actionPerformed(ActionEvent event) {
- System.exit(0);
- }
- }
-
- }
显示view java 代码
- import java.awt.BorderLayout;
-
- import javax.swing.JPanel;
- import javax.swing.JScrollPane;
- import javax.swing.JTextArea;
- import java.util.*;
-
- class DisplayView extends JPanel implements View,Observer{
- private JTextArea display;
-
- public DisplayView(){
- createGui();
- }
-
- public void createGui(){
- setLayout(new BorderLayout());
- display = new JTextArea(10, 40);
- display.setEditable(false);
- JScrollPane scrollDisplay = new JScrollPane(display);
- this.add(scrollDisplay, BorderLayout.CENTER);
- }
-
- public void refreshContactView(String newFirstName,
- String newLastName){
- display.setText("UPDATED CONTACT:\nNEW VALUES:\n" +
- "\tName: " + newFirstName + " " + newLastName +
- "\n" );
- }
- public void update(Observable o, Object arg) {
- if (arg instanceof TextModel){
- String firstName=((TextModel)arg).getFirstName();
- String lastName=((TextModel)arg).getLastName();
- this.refreshContactView(firstName, lastName);
- }
- }
- }
model java 代码
- import java.util.Observable;
-
-
- public class TextModel extends Observable {
- private String firstName;
- private String lastName;
-
- public TextModel(){
- }
-
- public void updateModel(String newFirstName, String newLastName) {
-
- if (!isEmptyString(newFirstName)) {
- setFirstName(newFirstName);
- }
- if (!isEmptyString(newLastName)) {
- setLastName(newLastName);
- }
- }
-
- public String getFirstName() {
- return firstName;
- }
-
- public String getLastName() {
- return lastName;
- }
-
- public void setFirstName(String newFirstName) {
- firstName = newFirstName;
- setChanged();
- notifyObservers(this);
- }
-
- public void setLastName(String newLastName) {
- lastName = newLastName;
- setChanged();
- notifyObservers(this);
- }
-
- private boolean isEmptyString(String input) {
- return ((input == null) || input.equals(""));
- }
-
-
- }
控制类
java 代码
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
-
- public class EditController implements ActionListener {
- private TextModel model;
- private EditView view;
-
- public EditController(TextModel m, EditView v){
- model = m;
- view = v;
- }
-
-
- public void actionPerformed(ActionEvent evt){
- Object source = evt.getSource();
- if (source == view.getUpdateRef()){
- updateModel();
- }
- }
- private void updateModel(){
- String firstName = null;
- String lastName = null;
- if (view.getFirstName()!=null){
- firstName = view.getFirstName();
- }
- if (view.getLastName()!=null){
- lastName = view.getLastName();
- }
- model.updateModel( firstName, lastName);
- }
-
-
- }
运行mvc
java 代码
- import javax.swing.JFrame;
- import javax.swing.JPanel;
-
- public class RunMVCPattern {
-
- public static void main(String [] arguments){
- DisplayView displayView = new DisplayView();
-
-
- TextModel model = new TextModel();
- model.addObserver( displayView);
-
- EditView editorView = new EditView(model);
- createGui(editorView, "Contact Edit Window");
-
- System.out.println("Creating DisplayView");
- createGui(displayView, " Display Window");
-
- }
-
- private static void createGui(JPanel contents, String title){
- JFrame applicationFrame = new JFrame(title);
- applicationFrame.getContentPane().add(contents);
-
- applicationFrame.pack();
-
-
- applicationFrame.setVisible(true);
- }
-
- }
分享到:
相关推荐
在这个名为“运用MVC模式及观察者模式的java小程序”的项目中,我们重点探讨了两种经典的设计模式:Model-View-Controller(MVC)模式和Observer(观察者)模式。这两种模式在JavaWeb开发中扮演着至关重要的角色。 ...
MVC模式在实际开发中,如Struts框架,仅实现了视图和控制器,模型部分需要开发者自定义实现。随着技术的发展,Spring MVC等框架提供了更全面的MVC支持,简化了开发工作。理解并熟练运用MVC模式,对于构建高效、灵活...
- `script.js`:JavaScript代码,实现MVC模式和Observer模式。 通过阅读和理解这些文件,你可以学习到如何在没有依赖库或框架的情况下,使用纯JavaScript实现一个功能完备且具有良好架构的Todo List应用。这将有助...
8. **观察者(Observer)**:观察者模式在PureMVC中用于实现事件通知机制,当模型发生变化时,通知相关的视图进行更新。 9. **通知(Notification)**:通知是PureMVC内部通信的主要手段,它们是带有类型和可选数据...
1. **实现概述**:实际开发中,可以使用Struts、Spring MVC等框架来实现MVC模式。它们提供了一套完整的解决方案,简化了开发流程。 2. **具体实现过程**:通常包括配置Action、编写Controller、定义Model类、创建...
标题提到的"Flex MVC框架下载",指的是提供了两种主流的Flex MVC框架——PureMVC和Cairngorm的SWC库文件。SWC是Adobe Flash和Flex中用于共享库和组件的二进制格式,开发者可以直接将这些库导入到项目中使用,无需...
**观察者模式(Observer Pattern)**是软件设计模式中的一种行为模式,它在Java中有着广泛的应用。这个模式的核心思想是“一对多”的依赖关系,即一个主题对象(Subject)可以被多个观察者(Observer)关注,当主题...
例如,使用Repository模式进行数据访问抽象,与依赖注入模式结合以实现灵活的服务定位,再配合MVC(模型-视图-控制器)模式构建用户界面,可以构建出高度解耦、易于测试和维护的系统。 此外,书中还深入探讨了如何...
C#的WinForm应用开发通常涉及用户界面和业务逻辑的交互,因此书中可能还会介绍如何利用设计模式来分离这两部分,例如使用MVC(Model-View-Controller)或MVVM(Model-View-ViewModel)模式。此外,可能会探讨如何...
4. **模型-视图-控制器(MVC)**:一种设计模式,将数据模型、界面显示(视图)和用户交互逻辑(控制器)分离,便于代码的维护和扩展。 **观察者模式** 观察者模式是一种行为设计模式,它定义了对象之间的一对多...
RxJava引入了Observable(可观察者)和Observer(观察者)两种模式,让开发者可以更简洁地处理多事件序列,从而实现更为灵活的网络请求和数据处理。 在项目实践中,文档指出,传统的HttpURLConnection类在进行HTTP...
Java设计模式中的观察者模式(Observer Pattern)是一种对象行为型模式,它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于事件处理和实时...
11. **MVC(模型-视图-控制器)模式**:是一种软件设计模式,将用户界面、业务逻辑和数据存储分离,以实现灵活的可维护性和可扩展性。模型负责数据处理,视图负责显示,控制器负责协调模型和视图。 除了以上列出的...
在IT行业中,`Observable`与`Observer`是Java编程语言中的两个重要概念,它们是JavaFX和Java.util.Observable库的一部分,用于实现观察者模式。观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,当一个...
设计模式的应用分为两种主要类型:广泛暴露(broad exposure)和孤立使用(isolated use)。广泛暴露的设计模式如MVC和DAO模式,它们影响整个系统的设计和开发,需要多团队成员共同理解,并且一旦选择,很难更改。而...
Java中`java.util.Observable`和`java.util.Observer`接口提供了观察者模式的实现。 7. **策略模式**: 策略模式定义了一系列算法,并使它们可以互相替换,让算法独立于使用它的客户。这在需要切换算法或者避免硬...
引言 1 1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 ...
除了这些模式,ASP.NET还广泛使用其他设计模式,如单例模式(Singleton)用于管理全局资源,工厂方法模式(Factory Method)用于创建对象,策略模式(Strategy)用于定义算法族,以及观察者模式(Observer)用于事件...