写了一个app小软件,重点不在于软件,软件bug挺多,也没去修改。
这个小软件只是为了更好的说明和了解设计模块而做的。
Java 程序设计–包结构
Java程序设计的系统体系结构很大一部分都体现在包结构上
大家看看我的这个小软件的分层:
结构还是挺清楚的。
一种典型的Java应用程序的包结构:
前缀.应用或项目的名称.模块组合.模块内部的技术实现
说明:
1、前缀:是网站域名的倒写,去掉www(如,Sun公司(非JDK级别)的东西:com.sun.* )。
2、其中模块组合又由系统、子系统、模块、组件等构成(具体情况根据项目的大小而定,如果项目很大,那么就多分几层。
3、模块内部的技术实现一般由:表现层、逻辑层、数据层等构成。
对于许多类都要使用的公共模块或公共类,可以再独立建立一个包,取名common或base,把这些公共类都放在其中。
对于功能上的公用模块或公共类可建立util或tool包,放入其中。
如本例的util包。
设计与实现的常用方式、DAO的基本功能
★ 设计的时候:从大到小
先把一个大问题分解成一系列的小问题。或者说是把一个大系统分解成多个小系统,小系统再继续进行往下分解,直到分解到自己能够掌控时,再进行动手实现。
★ 实现的时候:从小到大
先实现组件,进行测试通过了,再把几个组件实现合成模块,进行测试通过,然后继续往上扩大。
★ 最典型的DAO接口通常具有的功能
新增功能、修改功能、删除功能、按照主要的键值进行查询、获取所有值的功能、按照条件进行查询的功能。
★ 一个通用DAO接口模板
★ UserVO 和 UserQueryVO的区别
UserVO封装数据记录,而UserQueryVO用于封装查询条件。
下面的为那个小软件实现这些设计模式的简单汇总:
(含分层思想,值对象,工厂方法,Dao组件,面向接口编程)
main方法类:
UserClient :
package cn.hncu.app; import cn.hncu.app.ui.UserAddPanel; public class UserClient extends javax.swing.JFrame { public UserClient(){ super("chx"); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setBounds(100, 100, 800, 600); this.setContentPane(new UserAddPanel(this)); this.setVisible(true); } public static void main(String[] args) { new UserClient(); } }
公用模块类 utils类:
FileIO :
package cn.hncu.app.utils; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.List; public class FileIO { public static Object[] read(String fileName){ List<Object> list = new ArrayList<Object>(); ObjectInputStream objIn=null; try { objIn = new ObjectInputStream(new FileInputStream(fileName)); Object obj; //※※对象流的读不能用available()来判断,而应该用异常来确定是否读到结束 while(true){ obj=objIn.readObject(); list.add(obj); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { //读到文件末尾,就是出异常,通过这来判断是否读到结束。 //因此,本程序中,这里是正常的文件读取结束,不是我们之前认为的出异常--所以不输出异常信息 } catch (ClassNotFoundException e) { //读到文件末尾,就是出异常,通过这来判断是否读到结束。 //因此,本程序中,这里是正常的文件读取结束,不是我们之前认为的出异常--所以不输出异常信息 }finally{ if(objIn!=null){ try { objIn.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 obj){ ObjectOutputStream objOut =null; try { objOut=new ObjectOutputStream(new FileOutputStream(fileName,true)); //new FileOutputStream(fileName,true),有true的存在代表是添加而不是覆盖 objOut.writeObject(obj); } catch (Exception e) { e.printStackTrace(); return false; }finally{ if(objOut!=null){ try { objOut.close(); } catch (IOException e) { e.printStackTrace(); } } } return true; } }