码迷,mamicode.com
首页 > 编程语言 > 详细

Java之------设计思想

时间:2016-05-27 12:27:39      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

设计思想,是需要不断领悟的。。。


一、封装

Java的人都知道这是向对象的编程语言,从字面上理解,就是针对对象的一些操作,将具有某一特性的实体封装成一个类或者是将具有一定功能的方法,抽取出来封装成一个供外面调用的方法,然后通过new这个类或方法生成对象,最后通

过对对象进行操作或者实现相应的功能。如将一个人封装成一个人的类,人有属性:性别,年龄,出生日期,家庭住址等,外界对人进行操作时,只能改变其属性值,但是不能改变属性的种类,这要更安全,而且当对人进行操作时,也是连带属性

一起进行操作,这就是面向对象的编程。

所以java的设计思想一般离不开封装,如做一个项目,首先对项目的每个子系统进行封装,然后对子系统中的每个模块进行封装,最后对每个模块中的每个组件(组件:能完成某一特定功能的方法)进行封装,这里的子系统、模块、组件都是

一个封装体,这样做不仅能使项目做起来更加有条理,更加安全,而且让后面的维护和更改更加方便、简单、易操作。(后面有项目的实例)


二、Java程序设计的基本原则1

1、面向接口编程
a、这是Java编程里面大家公认的第一原则

b、接口很重要的一个功能:封装隔离
c、接口是功能块或封装块的外观

接口及相关机制最基本的作用:通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。根据接口可以了解对象的交互界面,而不需要了解对象所属的类。
面向对象程序设计讲究“提高内聚,松散耦合”,那么不同的程序模块怎么相互访问呢,就是通过接口,也就是接口是各部分对外的统一外观。接口在Java程序设计中体现的思想就是封装隔离,因为接口只是描述一个统一的行为,所以开发人员在面向接口编程时并不关心具体的实现。
由以上讲到的接口的作用和基本思想可以看到,接口在面向对象的Java程序设计中占有举足轻重的地位。事实上在设计阶段最重要的任务之一就是设计出各部分的接口,然后通过接口的组合,形成程序的基本框架结构。

注:对于行为模型,优先选用接口,尽量少用抽象类
既为约束子类的功能,又要提供一些公共的功能,就选用抽象类

2、优先使用对象组合而非类继承

在程序设计中,继承应该当做一种资源来使用,而不应该随意使用。同时在继承的时候继承链不能拖得太长,一旦有一个程序挂了,后面一路挂。

3、分层

最典型的三层结构: 表现层 --> 逻辑层 --> 数据层 

技术分享

① 表现层功能:展示数据、人机交互、收集参数调用逻辑层。
② 逻辑层功能:进行数据的逻辑校验、进行逻辑判断、实现业务功能、处理相关功能、处理后续流程、组织数据返回给表现层。
③ 数据层功能:实现数据持久化、实现对象和持久化数据的双向映射。

4、层间交互的基本原则

① 表现层调用逻辑层,逻辑层调用数据层,不可以反过来。
② 层间交互也应该通过接口进行调用,以确保各层的实现独立变化。


三、Java程序设计的基本原则2

★ 开闭原则
简单点说就是对新增开放,对修改关闭。而且应尽量做到不用修改模块的源代码,就能更改模块的行为。
★ 依赖性倒置原则
这个原则就是依赖抽象而不要依赖具体实现。
★ 接口隔离原则
这个原则就是不要使用通用的接口,而是为不同的用户使用不同的接口。
★ 替换原则
这个原则就是子类应当可以替换父类并出现在父类能够出现的任何地方。


四、类设计的基本经验

★ 类要单一
所设计的类功能要单一 ,一个类应该是描述一类极其相关的属性和方法。

★ 加强内聚,松散耦合

指一个类,能够在自己内部实现的功能就自己内部实现,不要去调其它类,尽量减少与其它类的依赖关系。

★ 好的封装性

不必对外开放的部分,一律不对外开放。如果在不确定属性权限的情况下,先把类的属性设成private,用的时候再开。

★ 类的粒度要合理

Java规范中建议,一个类的大小不要超过1000行,一个方法的大小不要超过100行。

★ 实现类不能依赖它的使用类

一个类依赖(使用或调用)了另一个类,那么在另一个类中就不能反过来再依赖当前类。

★ 应考虑灵活性,也就是可配置、可维护

用户的需求是会不断改变的,后期的修改与维护是不可避免的,因此软件开发时就要考虑灵活性。

★ 要考虑性能,考虑可伸缩性

要权衡速度与资源耗费之间的关系,要考虑软件能够在一定范围内可伸缩。 

★ 要考虑今后可能的变化,也就是可扩展性

可扩展性指该应用程序能够很方便地添加新的功能。

★ 要考虑合理的复用 

要尽量考虑复用,但也不能光考虑复用,不能把其它的设计原则都丢掉了。 

★ 要合理的考虑接口和抽象类的使用

优先使用接口,如果既想约束实现类的行为,又要为实现类提供公共的功能时,采用抽象类。 

★ 尽量减少类与协作类的交互次数和交互信息的量

类之间不要反复地调用,不要每次传很多的数据。

★ 父类不应知道子类的信息,子类必须知道父类的信息

★ 访问对象必须通过接口,不能绕过接口直接去访问


五、实例

功能:图形界面的个人信息管理系统,实现增、删、改、查等功能,而且将相关信息存在文件中。

设计思想:每个功能一个模块,也就是一个封装体。


表现层:

AddressApp.java(主界面)

设置界面的大体框架,如菜单,和面板,标题等

/* 
 * AddressApp.java 
 * 
 * Created on __DATE__, __TIME__ 
 */  
  
package cn.hncu;  
  
import javax.swing.JFrame;  
  
import cn.hncu.ui.ListPanel;  
  
/** 
 * 
 * @author  __USER__ 
 */  
public class AddressApp extends JFrame {  
  
    /** Creates new form AddressApp */  
    public AddressApp() {  
        initComponents();  
        this.setContentPane(new ListPanel(this));  
    }  
  
    /** This method is called from within the constructor to 
     * initialize the form. 
     * WARNING: Do NOT modify this code. The content of this method is 
     * always regenerated by the Form Editor. 
     */  
    //GEN-BEGIN:initComponents  
    // <editor-fold defaultstate="collapsed" desc="Generated Code">  
    private void initComponents() {  
  
        menuBar = new javax.swing.JMenuBar();  
        fileMenu = new javax.swing.JMenu();  
        openMenuItem = new javax.swing.JMenuItem();  
        saveMenuItem = new javax.swing.JMenuItem();  
        saveAsMenuItem = new javax.swing.JMenuItem();  
        exitMenuItem = new javax.swing.JMenuItem();  
        editMenu = new javax.swing.JMenu();  
        cutMenuItem = new javax.swing.JMenuItem();  
        copyMenuItem = new javax.swing.JMenuItem();  
        pasteMenuItem = new javax.swing.JMenuItem();  
        deleteMenuItem = new javax.swing.JMenuItem();  
        helpMenu = new javax.swing.JMenu();  
        contentsMenuItem = new javax.swing.JMenuItem();  
        aboutMenuItem = new javax.swing.JMenuItem();  
  
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);  
        setMinimumSize(new java.awt.Dimension(800, 600));  
        getContentPane().setLayout(null);  
  
        fileMenu.setText("File");  
  
        openMenuItem.setText("Open");  
        fileMenu.add(openMenuItem);  
  
        saveMenuItem.setText("Save");  
        fileMenu.add(saveMenuItem);  
  
        saveAsMenuItem.setText("Save As ...");  
        fileMenu.add(saveAsMenuItem);  
  
        exitMenuItem.setText("Exit");  
        exitMenuItem.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                exitMenuItemActionPerformed(evt);  
            }  
        });  
        fileMenu.add(exitMenuItem);  
  
        menuBar.add(fileMenu);  
  
        editMenu.setText("Edit");  
  
        cutMenuItem.setText("Cut");  
        editMenu.add(cutMenuItem);  
  
        copyMenuItem.setText("Copy");  
        editMenu.add(copyMenuItem);  
  
        pasteMenuItem.setText("Paste");  
        editMenu.add(pasteMenuItem);  
  
        deleteMenuItem.setText("Delete");  
        editMenu.add(deleteMenuItem);  
  
        menuBar.add(editMenu);  
  
        helpMenu.setText("Help");  
  
        contentsMenuItem.setText("Contents");  
        helpMenu.add(contentsMenuItem);  
  
        aboutMenuItem.setText("About");  
        helpMenu.add(aboutMenuItem);  
  
        menuBar.add(helpMenu);  
  
        setJMenuBar(menuBar);  
  
        pack();  
    }// </editor-fold>  
    //GEN-END:initComponents  
  
    private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitMenuItemActionPerformed  
        System.exit(0);  
    }//GEN-LAST:event_exitMenuItemActionPerformed  
  
    /** 
     * @param args the command line arguments 
     */  
    public static void main(String args[]) {  
        java.awt.EventQueue.invokeLater(new Runnable() {  
            public void run() {  
                new AddressApp().setVisible(true);  
            }  
        });  
    }  
  
    //GEN-BEGIN:variables  
    // Variables declaration - do not modify  
    private javax.swing.JMenuItem aboutMenuItem;  
    private javax.swing.JMenuItem contentsMenuItem;  
    private javax.swing.JMenuItem copyMenuItem;  
    private javax.swing.JMenuItem cutMenuItem;  
    private javax.swing.JMenuItem deleteMenuItem;  
    private javax.swing.JMenu editMenu;  
    private javax.swing.JMenuItem exitMenuItem;  
    private javax.swing.JMenu fileMenu;  
    private javax.swing.JMenu helpMenu;  
    private javax.swing.JMenuBar menuBar;  
    private javax.swing.JMenuItem openMenuItem;  
    private javax.swing.JMenuItem pasteMenuItem;  
    private javax.swing.JMenuItem saveAsMenuItem;  
    private javax.swing.JMenuItem saveMenuItem;  
    // End of variables declaration//GEN-END:variables  
  
}  
ListPanel.java

清单面板,包括数据的显示,和数据的相关操作按钮

/* 
 * 
 * Created on __DATE__, __TIME__ 
 */  
  
package cn.hncu.ui;  
  
import javax.swing.JFrame;  
  
import cn.hncu.business.MySet;  
  
/** 
 * 
 * @author  __USER__ 
 */  
public class ListPanel extends javax.swing.JPanel {  
    private JFrame mainFrame = null;  
  
    /** Creates new form ListPanel */  
    public ListPanel(JFrame mainFrame) {  
        this.mainFrame = mainFrame;  
        this.initComponents();  
        myInitData();  
    }  
  
    public ListPanel(JFrame mainFrame, Object objs[]) {  
        this.mainFrame = mainFrame;  
        this.initComponents();  
        jListAddress.setListData(objs);  
    }  
  
    private void myInitData() {  
        MySet set = new MySet();  
        Object objs[] = set.getAll();  
        jListAddress.setListData(objs);  
    }  
  
    /** This method is called from within the constructor to 
     * initialize the form. 
     * WARNING: Do NOT modify this code. The content of this method is 
     * always regenerated by the Form Editor. 
     */  
    //GEN-BEGIN:initComponents  
    // <editor-fold defaultstate="collapsed" desc="Generated Code">  
    private void initComponents() {  
  
        queryBtn = new javax.swing.JButton();  
        addBtn = new javax.swing.JButton();  
        updateBtn = new javax.swing.JButton();  
        deleteBtn = new javax.swing.JButton();  
        jLabel1 = new javax.swing.JLabel();  
        jScrollPane1 = new javax.swing.JScrollPane();  
        jListAddress = new javax.swing.JList();  
  
        setPreferredSize(new java.awt.Dimension(800, 600));  
        setLayout(null);  
  
        queryBtn.setText("\u67e5\u8be2\u64cd\u4f5c");  
        queryBtn.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                queryBtnActionPerformed(evt);  
            }  
        });  
        add(queryBtn);  
        queryBtn.setBounds(510, 330, 93, 29);  
  
        addBtn.setText("\u6dfb\u52a0\u64cd\u4f5c");  
        addBtn.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                addBtnActionPerformed(evt);  
            }  
        });  
        add(addBtn);  
        addBtn.setBounds(140, 330, 95, 29);  
  
        updateBtn.setText("\u4fee\u6539\u64cd\u4f5c");  
        updateBtn.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                updateBtnActionPerformed(evt);  
            }  
        });  
        add(updateBtn);  
        updateBtn.setBounds(390, 330, 93, 29);  
  
        deleteBtn.setText("\u5220\u9664\u64cd\u4f5c");  
        deleteBtn.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                deleteBtnActionPerformed(evt);  
            }  
        });  
        add(deleteBtn);  
        deleteBtn.setBounds(260, 330, 93, 29);  
  
        jLabel1.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 24));  
        jLabel1.setText("\u6211\u7684\u5730\u5740\u672c");  
        add(jLabel1);  
        jLabel1.setBounds(310, 70, 150, 40);  
  
        jListAddress.setModel(new javax.swing.AbstractListModel() {  
            String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4",  
                    "Item 5" };  
  
            public int getSize() {  
                return strings.length;  
            }  
  
            public Object getElementAt(int i) {  
                return strings[i];  
            }  
        });  
        jScrollPane1.setViewportView(jListAddress);  
  
        add(jScrollPane1);  
        jScrollPane1.setBounds(250, 130, 250, 178);  
    }// </editor-fold>  
    //GEN-END:initComponents  
  
    private void queryBtnActionPerformed(java.awt.event.ActionEvent evt) {  
        mainFrame.setContentPane(new QueryPanel(mainFrame));  
        mainFrame.validate();  
    }  
  
    private void updateBtnActionPerformed(java.awt.event.ActionEvent evt) {  
        String str = (String) (jListAddress.getSelectedValue());  
        mainFrame.setContentPane(new UpDatePanel(mainFrame, str));  
        mainFrame.validate();  
    }  
  
    private void deleteBtnActionPerformed(java.awt.event.ActionEvent evt) {  
        String str = (String) (jListAddress.getSelectedValue());  
        mainFrame.setContentPane(new DeletePanel(mainFrame, str));  
        mainFrame.validate();  
    }  
  
    private void addBtnActionPerformed(java.awt.event.ActionEvent evt) {  
        mainFrame.setContentPane(new AddPanel(mainFrame));  
        mainFrame.validate();  
    }  
  
    //GEN-BEGIN:variables  
    // Variables declaration - do not modify  
    private javax.swing.JButton addBtn;  
    private javax.swing.JButton deleteBtn;  
    private javax.swing.JLabel jLabel1;  
    private javax.swing.JList jListAddress;  
    private javax.swing.JScrollPane jScrollPane1;  
    private javax.swing.JButton queryBtn;  
    private javax.swing.JButton updateBtn;  
    // End of variables declaration//GEN-END:variables  
  
}  
技术分享
AddPanel.java

点击添加按钮,就会跳到这个面板中进行添加操作

/* 
 * AddPanel.java 
 * 
 * Created on __DATE__, __TIME__ 
 */  
  
package cn.hncu.ui;  
  
import javax.swing.JFrame;  
import javax.swing.JOptionPane;  
  
import cn.hncu.business.MySet;  
  
/** 
 * 
 * @author  __USER__ 
 */  
public class AddPanel extends javax.swing.JPanel {  
    private JFrame mainFrame = null;  
  
    /** Creates new form AddPanel */  
    public AddPanel(JFrame mainFrame) {  
        this.mainFrame = mainFrame;  
        initComponents();  
    }  
  
    /** This method is called from within the constructor to 
     * initialize the form. 
     * WARNING: Do NOT modify this code. The content of this method is 
     * always regenerated by the Form Editor. 
     */  
    //GEN-BEGIN:initComponents  
    // <editor-fold defaultstate="collapsed" desc="Generated Code">  
    private void initComponents() {  
  
        jLabelAddr = new javax.swing.JLabel();  
        jLabelName1 = new javax.swing.JLabel();  
        jLabelAge = new javax.swing.JLabel();  
        tfdAddr = new javax.swing.JTextField();  
        tfdName = new javax.swing.JTextField();  
        tfdAge = new javax.swing.JTextField();  
        jLabel1 = new javax.swing.JLabel();  
        btnBack = new javax.swing.JButton();  
        btnAdd = new javax.swing.JButton();  
  
        setLayout(null);  
  
        jLabelAddr.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14));  
        jLabelAddr.setText("\u5730\u5740");  
        add(jLabelAddr);  
        jLabelAddr.setBounds(220, 220, 70, 40);  
  
        jLabelName1.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14));  
        jLabelName1.setText("\u59d3\u540d");  
        add(jLabelName1);  
        jLabelName1.setBounds(220, 140, 70, 40);  
  
        jLabelAge.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14));  
        jLabelAge.setText("\u5e74\u9f84");  
        add(jLabelAge);  
        jLabelAge.setBounds(220, 180, 70, 40);  
        add(tfdAddr);  
        tfdAddr.setBounds(290, 230, 220, 26);  
        add(tfdName);  
        tfdName.setBounds(290, 150, 90, 26);  
        add(tfdAge);  
        tfdAge.setBounds(290, 190, 90, 26);  
  
        jLabel1.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 24));  
        jLabel1.setText("\u6dfb\u52a0\u9762\u677f...");  
        add(jLabel1);  
        jLabel1.setBounds(320, 80, 120, 40);  
  
        btnBack.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18));  
        btnBack.setText("\u8fd4\u56de");  
        btnBack.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                btnBackActionPerformed(evt);  
            }  
        });  
        add(btnBack);  
        btnBack.setBounds(450, 330, 95, 33);  
  
        btnAdd.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18));  
        btnAdd.setText("\u6dfb\u52a0");  
        btnAdd.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                btnAddActionPerformed(evt);  
            }  
        });  
        add(btnAdd);  
        btnAdd.setBounds(280, 330, 90, 33);  
    }// </editor-fold>  
    //GEN-END:initComponents  
  
    private void btnBackActionPerformed(java.awt.event.ActionEvent evt) {  
        mainFrame.setContentPane(new ListPanel(mainFrame));  
        mainFrame.validate();  
    }  
  
    private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {  
        String name = tfdName.getText();  
        String addr = tfdAddr.getText();  
        String ageStr = tfdAge.getText();  
        try {  
            int ageInt = Integer.parseInt(ageStr);  
        } catch (NumberFormatException e) {  
            e.printStackTrace();  
        }  
        String str = name + " , " + ageStr + " , " + addr;  
        boolean flag = false;  
        MySet set = new MySet();  
        flag = set.add(str);  
        if (flag) {  
            mainFrame.setContentPane(new ListPanel(mainFrame));  
            mainFrame.validate();  
        } else {  
            JOptionPane.showMessageDialog(this, "添加失败");  
        }  
    }  
  
    //GEN-BEGIN:variables  
    // Variables declaration - do not modify  
    private javax.swing.JButton btnAdd;  
    private javax.swing.JButton btnBack;  
    private javax.swing.JLabel jLabel1;  
    private javax.swing.JLabel jLabelAddr;  
    private javax.swing.JLabel jLabelAge;  
    private javax.swing.JLabel jLabelName1;  
    private javax.swing.JTextField tfdAddr;  
    private javax.swing.JTextField tfdAge;  
    private javax.swing.JTextField tfdName;  
    // End of variables declaration//GEN-END:variables  
  
}  
技术分享
DeletePanel.java

删除界面,选择需要删除的用户点击删除按钮

/* 
 * DeletePanel.java 
 * 
 * Created on __DATE__, __TIME__ 
 */  
  
package cn.hncu.ui;  
  
import javax.swing.JFrame;  
import javax.swing.JOptionPane;  
  
import cn.hncu.business.MySet;  
  
/** 
 * 
 * @author  __USER__ 
 */  
public class DeletePanel extends javax.swing.JPanel {  
    private JFrame mainFrame = null;  
    String str = "";  
  
    /** Creates new form DeletePanel */  
    public DeletePanel(JFrame mainFrame, String str) {  
        this.str = str;  
        this.mainFrame = mainFrame;  
        initComponents();  
        String strs[] = str.split(",");  
        tfdName.setText(strs[0]);  
        tfdName.setEditable(false);  
        tfdAge.setText(strs[1]);  
        tfdAge.setEditable(false);  
        tfdAddr.setText(strs[2]);  
        tfdAddr.setEditable(false);  
  
    }  
  
    //GEN-BEGIN:initComponents  
    // <editor-fold defaultstate="collapsed" desc="Generated Code">  
    private void initComponents() {  
  
        jLabelAddr = new javax.swing.JLabel();  
        jLabelName = new javax.swing.JLabel();  
        jLabelAge = new javax.swing.JLabel();  
        tfdAddr = new javax.swing.JTextField();  
        tfdName = new javax.swing.JTextField();  
        tfdAge = new javax.swing.JTextField();  
        jLabel1 = new javax.swing.JLabel();  
        btnBack = new javax.swing.JButton();  
        btnDelete = new javax.swing.JButton();  
  
        setLayout(null);  
  
        jLabelAddr.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14));  
        jLabelAddr.setText("\u5730\u5740");  
        add(jLabelAddr);  
        jLabelAddr.setBounds(220, 230, 70, 40);  
  
        jLabelName.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14));  
        jLabelName.setText("\u59d3\u540d");  
        add(jLabelName);  
        jLabelName.setBounds(220, 150, 70, 40);  
  
        jLabelAge.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14));  
        jLabelAge.setText("\u5e74\u9f84");  
        add(jLabelAge);  
        jLabelAge.setBounds(220, 190, 70, 40);  
        add(tfdAddr);  
        tfdAddr.setBounds(290, 240, 220, 26);  
        add(tfdName);  
        tfdName.setBounds(290, 160, 90, 26);  
        add(tfdAge);  
        tfdAge.setBounds(290, 200, 90, 26);  
  
        jLabel1.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 24));  
        jLabel1.setText("\u5220\u9664\u9762\u677f...");  
        add(jLabel1);  
        jLabel1.setBounds(320, 90, 120, 40);  
  
        btnBack.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18));  
        btnBack.setText("\u8fd4\u56de");  
        btnBack.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                btnBackActionPerformed(evt);  
            }  
        });  
        add(btnBack);  
        btnBack.setBounds(450, 340, 95, 33);  
  
        btnDelete.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18));  
        btnDelete.setText("\u5220\u9664");  
        btnDelete.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                btnDeleteActionPerformed(evt);  
            }  
        });  
        add(btnDelete);  
        btnDelete.setBounds(280, 340, 90, 33);  
    }// </editor-fold>  
    //GEN-END:initComponents  
  
    private void btnDeleteActionPerformed(java.awt.event.ActionEvent evt) {  
        MySet set = new MySet();  
        boolean flag = set.delete(str);  
        if (flag) {  
            mainFrame.setContentPane(new ListPanel(mainFrame));  
            mainFrame.validate();  
        } else {  
            JOptionPane.showMessageDialog(this, "添加失败");  
        }  
  
    }  
  
    private void btnBackActionPerformed(java.awt.event.ActionEvent evt) {  
        mainFrame.setContentPane(new ListPanel(mainFrame));  
        mainFrame.validate();  
    }  
  
    //GEN-BEGIN:variables  
    // Variables declaration - do not modify  
    private javax.swing.JButton btnBack;  
    private javax.swing.JButton btnDelete;  
    private javax.swing.JLabel jLabel1;  
    private javax.swing.JLabel jLabelAddr;  
    private javax.swing.JLabel jLabelAge;  
    private javax.swing.JLabel jLabelName;  
    private javax.swing.JTextField tfdAddr;  
    private javax.swing.JTextField tfdAge;  
    private javax.swing.JTextField tfdName;  
    // End of variables declaration//GEN-END:variables  
  
}  
技术分享

QueryPanel.java

查询界面

/* 
 * QueryPanel.java 
 * 
 * Created on __DATE__, __TIME__ 
 */  
  
package cn.hncu.ui;  
  
import javax.swing.JFrame;  
import javax.swing.JOptionPane;  
  
import cn.hncu.business.MySet;  
  
/** 
 * 
 * @author  __USER__ 
 */  
public class QueryPanel extends javax.swing.JPanel {  
    private JFrame mainFrame = null;  
  
    /** Creates new form QueryPanel */  
    public QueryPanel(JFrame mainFrame) {  
        this.mainFrame = mainFrame;  
        initComponents();  
    }  
  
    //GEN-BEGIN:initComponents  
    // <editor-fold defaultstate="collapsed" desc="Generated Code">  
    private void initComponents() {  
  
        jLabelAddr = new javax.swing.JLabel();  
        jLabelName1 = new javax.swing.JLabel();  
        jLabelAge = new javax.swing.JLabel();  
        tfdAddr = new javax.swing.JTextField();  
        tfdName = new javax.swing.JTextField();  
        tfdAge = new javax.swing.JTextField();  
        jLabel1 = new javax.swing.JLabel();  
        btnBack = new javax.swing.JButton();  
        btnQuery = new javax.swing.JButton();  
  
        setLayout(null);  
  
        jLabelAddr.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14));  
        jLabelAddr.setText("\u5730\u5740");  
        add(jLabelAddr);  
        jLabelAddr.setBounds(230, 230, 70, 40);  
  
        jLabelName1.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14));  
        jLabelName1.setText("\u59d3\u540d");  
        add(jLabelName1);  
        jLabelName1.setBounds(230, 150, 70, 40);  
  
        jLabelAge.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14));  
        jLabelAge.setText("\u5e74\u9f84");  
        add(jLabelAge);  
        jLabelAge.setBounds(230, 190, 70, 40);  
        add(tfdAddr);  
        tfdAddr.setBounds(300, 240, 220, 26);  
        add(tfdName);  
        tfdName.setBounds(300, 160, 90, 26);  
        add(tfdAge);  
        tfdAge.setBounds(300, 200, 90, 26);  
  
        jLabel1.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 24));  
        jLabel1.setText("\u67e5\u8be2\u9762\u677f...");  
        add(jLabel1);  
        jLabel1.setBounds(330, 90, 120, 40);  
  
        btnBack.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18));  
        btnBack.setText("\u8fd4\u56de");  
        btnBack.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                btnBackActionPerformed(evt);  
            }  
        });  
        add(btnBack);  
        btnBack.setBounds(460, 340, 95, 33);  
  
        btnQuery.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18));  
        btnQuery.setText("\u67e5\u8be2");  
        btnQuery.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                btnQueryActionPerformed(evt);  
            }  
        });  
        add(btnQuery);  
        btnQuery.setBounds(290, 340, 90, 33);  
    }// </editor-fold>  
    //GEN-END:initComponents  
  
    private void btnQueryActionPerformed(java.awt.event.ActionEvent evt) {  
        String name = tfdName.getText();  
        String addr = tfdAddr.getText();  
        String ageStr = tfdAge.getText();  
        MySet set = new MySet();  
        try {  
            Object obj[] = set.Query(name, ageStr, addr);  
            mainFrame.setContentPane(new ListPanel(mainFrame, obj));  
            mainFrame.validate();  
        } catch (Exception e) {  
            JOptionPane.showMessageDialog(this, "无该联系人");  
        }  
    }  
  
    private void btnBackActionPerformed(java.awt.event.ActionEvent evt) {  
        mainFrame.setContentPane(new ListPanel(mainFrame));  
        mainFrame.validate();  
    }  
  
    //GEN-BEGIN:variables  
    // Variables declaration - do not modify  
    private javax.swing.JButton btnBack;  
    private javax.swing.JButton btnQuery;  
    private javax.swing.JLabel jLabel1;  
    private javax.swing.JLabel jLabelAddr;  
    private javax.swing.JLabel jLabelAge;  
    private javax.swing.JLabel jLabelName1;  
    private javax.swing.JTextField tfdAddr;  
    private javax.swing.JTextField tfdAge;  
    private javax.swing.JTextField tfdName;  
    // End of variables declaration//GEN-END:variables  
  
}  
技术分享
UpDatePanel.java

修改界面

/* 
 * UpDate.java 
 * 
 * Created on __DATE__, __TIME__ 
 */  
  
package cn.hncu.ui;  
  
import javax.swing.JFrame;  
import javax.swing.JOptionPane;  
  
import cn.hncu.business.MySet;  
  
/** 
 * 
 * @author  __USER__ 
 */  
public class UpDatePanel extends javax.swing.JPanel {  
    private JFrame mainFrame = null;  
    private String oldStr = "";  
  
    /** Creates new form UpDate */  
    public UpDatePanel(JFrame mainFrame, String oldStr) {  
        this.mainFrame = mainFrame;  
        this.oldStr = oldStr;  
        initComponents();  
    }  
  
    /** This method is called from within the constructor to 
     * initialize the form. 
     * WARNING: Do NOT modify this code. The content of this method is 
     * always regenerated by the Form Editor. 
     */  
    //GEN-BEGIN:initComponents  
    // <editor-fold defaultstate="collapsed" desc="Generated Code">  
    private void initComponents() {  
  
        jLabelAddr = new javax.swing.JLabel();  
        jLabelName1 = new javax.swing.JLabel();  
        jLabelAge = new javax.swing.JLabel();  
        tfdAddr = new javax.swing.JTextField();  
        tfdName = new javax.swing.JTextField();  
        tfdAge = new javax.swing.JTextField();  
        jLabel1 = new javax.swing.JLabel();  
        btnBack = new javax.swing.JButton();  
        btnUpdate = new javax.swing.JButton();  
  
        setLayout(null);  
  
        jLabelAddr.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14));  
        jLabelAddr.setText("\u5730\u5740");  
        add(jLabelAddr);  
        jLabelAddr.setBounds(250, 230, 70, 40);  
  
        jLabelName1.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14));  
        jLabelName1.setText("\u59d3\u540d");  
        add(jLabelName1);  
        jLabelName1.setBounds(250, 150, 70, 40);  
  
        jLabelAge.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 14));  
        jLabelAge.setText("\u5e74\u9f84");  
        add(jLabelAge);  
        jLabelAge.setBounds(250, 190, 70, 40);  
        add(tfdAddr);  
        tfdAddr.setBounds(320, 240, 220, 26);  
        add(tfdName);  
        tfdName.setBounds(320, 160, 90, 26);  
  
        tfdAge.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                tfdAgeActionPerformed(evt);  
            }  
        });  
        add(tfdAge);  
        tfdAge.setBounds(320, 200, 90, 26);  
  
        jLabel1.setFont(new java.awt.Font("Microsoft YaHei UI", 1, 24));  
        jLabel1.setText("\u4fee\u6539\u9762\u677f...");  
        add(jLabel1);  
        jLabel1.setBounds(350, 90, 120, 40);  
  
        btnBack.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18));  
        btnBack.setText("\u8fd4\u56de");  
        btnBack.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                btnBackActionPerformed(evt);  
            }  
        });  
        add(btnBack);  
        btnBack.setBounds(480, 340, 95, 33);  
  
        btnUpdate.setFont(new java.awt.Font("Microsoft YaHei UI", 0, 18));  
        btnUpdate.setText("\u4fee\u6539");  
        btnUpdate.addActionListener(new java.awt.event.ActionListener() {  
            public void actionPerformed(java.awt.event.ActionEvent evt) {  
                btnUpdateActionPerformed(evt);  
            }  
        });  
        add(btnUpdate);  
        btnUpdate.setBounds(310, 340, 90, 33);  
    }// </editor-fold>  
    //GEN-END:initComponents  
  
    private void btnUpdateActionPerformed(java.awt.event.ActionEvent evt) {  
        String name = tfdName.getText();  
        String addr = tfdAddr.getText();  
        String ageStr = tfdAge.getText();  
        String newStr = name + " , " + ageStr + " , " + addr;  
        boolean flag = false;  
        MySet set = new MySet();  
        flag = set.upDate(oldStr, newStr);  
        if (flag) {  
            mainFrame.setContentPane(new ListPanel(mainFrame));  
            mainFrame.validate();  
        } else {  
            JOptionPane.showMessageDialog(this, "修改失败");  
        }  
    }  
  
    private void btnBackActionPerformed(java.awt.event.ActionEvent evt) {  
        mainFrame.setContentPane(new ListPanel(mainFrame));  
        mainFrame.validate();  
    }  
  
    private void tfdAgeActionPerformed(java.awt.event.ActionEvent evt) {  
        // TODO add your handling code here:  
    }  
  
    //GEN-BEGIN:variables  
    // Variables declaration - do not modify  
    private javax.swing.JButton btnBack;  
    private javax.swing.JButton btnUpdate;  
    private javax.swing.JLabel jLabel1;  
    private javax.swing.JLabel jLabelAddr;  
    private javax.swing.JLabel jLabelAge;  
    private javax.swing.JLabel jLabelName1;  
    private javax.swing.JTextField tfdAddr;  
    private javax.swing.JTextField tfdAge;  
    private javax.swing.JTextField tfdName;  
    // End of variables declaration//GEN-END:variables  
  
}
技术分享

注:我这个程序的逻辑层和数据层都没有按照面向接口的原则写接口、实现类和工厂类,我这里只是为了表现这样一种设计思想,关于这种分层的设计模式详情请见本博客的“Java之------常用的设计模式”点击打开链接里面的工厂模式

逻辑层(business层)

MySet.java

package cn.hncu.business;  
  
import javax.swing.JOptionPane;  
  
import cn.hncu.dao.DaoFile;  
  
public class MySet {  
    final String FileName="dao.data";  
      
    public static Object objs[]=new Object[0];  
      
    public boolean contains(Object obj){  
        for (Object o:objs){  
            if (o.equals(obj)){  
                return true;  
            }  
        }  
        return false;  
    }  
      
    public boolean add(Object o){  
        if (contains(o)){  
            return false;  
        }  
        Object temp[]=new Object[objs.length+1];  
        System.arraycopy(objs, 0, temp, 0, objs.length);  
        temp[objs.length]=o;  
        objs=temp;  
        boolean result=save();  
        return result;  
    }  
      
    public boolean delete(Object obj){  
        if (!contains(obj)){  
            return false;  
        }  
        Object tempObj[]=new Object[objs.length-1];  
        int k=0;  
        for (int i=0;i<objs.length;i++){  
            if (!objs[i].equals(obj)){  
                tempObj[k++]=objs[i];  
            }  
        }  
        objs=tempObj;  
        boolean result=save();  
        return result;  
    }  
      
    public boolean upDate(Object oldObj,Object newObj){  
        for (int i=0;i<objs.length;i++){  
            if (objs[i].equals(oldObj)){  
                objs[i]=newObj;  
                boolean result=save();  
                return result;  
            }  
        }  
        return false;  
    }  
      
    public Object[] Query(String nameStr,String ageStr,String addrStr){  
        Object tempObj[]=new Object[objs.length];  
        int k=0;  
        for (int i=0;i<tempObj.length;i++){  
            String strObj=(String) objs[i];  
            String strs[]=strObj.split(",");  
              
            if (nameStr!=null&&nameStr.trim().length()>0){  
                if (!strs[0].contains(nameStr)){  
                    continue;  
                }  
            }  
              
            if (ageStr!=null&&ageStr.trim().length()>0){  
                if (!strs[1].equals(ageStr)){  
                    continue;  
                }  
            }  
              
            if (addrStr!=null&&addrStr.trim().length()>0){  
                if (!strs[2].contains(addrStr)){  
                    continue;  
                }  
            }  
            tempObj[k++]=objs[i];  
        }  
        Object tempObj2[]=new Object[k];  
        for (int i=0;i<k;i++){  
            tempObj2[i]=tempObj[i];  
        }  
        return tempObj2;  
    }  
      
    public Object[] getAll(){  
        objs=DaoFile.read(FileName);  
        return objs;  
    }  
      
    public boolean save(){  
        boolean result=DaoFile.write(FileName, objs);  
        if (result==false){  
            JOptionPane.showMessageDialog(null, "Data saving failed!");  
            return false;  
        }  
        return true;  
    }  
      
}  
数据层

DaoFile.java

package cn.hncu.dao;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class DaoFile {
	public static Object[] read(String fileName){
		ArrayList<Object> list=new ArrayList<Object>();
		ObjectInputStream in=null;
		try {
			in=new ObjectInputStream(new FileInputStream(fileName));
			Object obj=null;
			//※※对象流的读不能用available()来判断,而应该用异常来确定是否读到结束
			while (true){
				obj=in.readObject();
				list.add(obj);
			}
		} catch (Exception e) {
			//读到文件末尾,就是出异常,通过这来判断是否读到结束。
			//因此,本程序中,这里是正常的文件读取结束,不是我们之前认为的出异常--所以不输出异常信息
			e.printStackTrace();
		} finally {
			if (in!=null){
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		Object objs[]=list.toArray();
		if (objs==null){
			objs=new Object[0];
		}
		return objs;
	}
	
	public static boolean write(String fileName,Object objs[]){
		ObjectOutputStream out=null;
		try {
			out=new ObjectOutputStream(new FileOutputStream(fileName));
			for (Object o:objs){
				out.writeObject(o);
			}
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		} finally {
			if (out!=null){
				try {
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return true;
	}
}




Java之------设计思想

标签:

原文地址:http://blog.csdn.net/x121850182/article/details/51489361

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!