PersonDAOProxyJDBC.java
package org.michael.demo.proxy;
import java.util.Set;
import org.michael.demo.dao.PersonDAO;
import org.michael.demo.dao.impl.PersonDAOImplJDBC;
import org.michael.demo.vo.Person;
public class PersonDAOProxyJDBC implements PersonDAO {
private PersonDAO dao = null;
public PersonDAOProxyJDBC(String type) {
this.dao = new PersonDAOImplJDBC(type);
}
public boolean doCreate(Person person) throws Exception {
// TODO Auto-generated method stub
return this.dao.doCreate(person);
public boolean doDelete(String id) throws Exception {
return this.dao.doDelete(id);
public boolean doUpdate(Person person) throws Exception {
return this.dao.doUpdate(person);
public Set<Person> findAll() throws Exception {
return this.dao.findAll();
public Person findById(String id) throws Exception {
return this.dao.findById(id);
public Set<Person> findByLike(String keyWord) throws Exception {
return this.dao.findByLike(keyWord);
}
InputData.java
package org.michael.demo.util;
//輸入資料的操作類
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class InputData {
private BufferedReader buf = null;
public InputData() {
buf = new BufferedReader(new InputStreamReader(System.in));
public int getInt() {
int temp = 0;
// 如果輸入的不是數字,至少應該有一個提示,告訴使用者輸入錯了
// 可以使用正則驗證
String str = null;
boolean flag = true;
while (flag) {
// 輸入資料
str = this.getString();
if (!(str.matches("\\d+"))) {
// 如果不是一個數字,則必須重新輸入
System.out.print("輸入的内容,必須是整數,請重新輸入:");
} else {
// 是一個正确的數字,則可以進行轉換
temp = Integer.parseInt(str);
// 表示退出循環
flag = false;
}
}
return temp;
public String getString() {
try {
str = buf.readLine();
} catch (IOException e) {
e.printStackTrace();
return str;
public float getFloat() {
float f = 0.0f;
if (!(str.matches("\\d+.?\\d{1,2}"))) {
System.out.print("輸入的内容,必須是小數(小數點後隻到兩位),請重新輸入:");
f = Float.parseFloat(str);
return f;
TimeStamp.java
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Random;
// 取得時間戳的類
public class TimeStamp {
private Calendar calendar = null;
// 此标記有外部決定
private String flag = null;
public TimeStamp() {
this.calendar = new GregorianCalendar();
public TimeStamp(String flag) {
this() ;
this.flag = flag;
public String getTimeStamp() {
StringBuffer buf = new StringBuffer();
if (this.flag != null) {
buf.append(this.flag);
buf.append(this.addZero(calendar.get(Calendar.YEAR), 4));
buf.append(this.addZero(calendar.get(Calendar.MONTH) + 1, 2));
buf.append(this.addZero(calendar.get(Calendar.DAY_OF_MONTH), 2));
buf.append(this.addZero(calendar.get(Calendar.HOUR_OF_DAY), 2));
buf.append(this.addZero(calendar.get(Calendar.MINUTE), 2));
buf.append(this.addZero(calendar.get(Calendar.SECOND), 2));
buf.append(this.addZero(calendar.get(Calendar.MILLISECOND), 3));
return buf.toString();
public String getTimeStampRandom() {
Random r = new Random();
buf.append(this.getTimeStamp());
buf.append(r.nextInt(10));
// 可以單獨設定一個加“0”的操作
private String addZero(int temp, int len) {
String str = temp + "";
while (str.length() < len) {
str = "0" + str;
Person.java
package org.michael.demo.vo;
import java.io.Serializable;
public abstract class Person implements Comparable<Object>,Serializable {
// 定義各公共屬性
private String id ;
private String name ;
private int age ;
public Person(String id,String name,int age){
this.setId(id) ;
this.setName(name) ;
this.setAge(age) ;
}
public String getId() {
return id;
public void setId(String id) {
this.id = id;
public String getName() {
return name;
public void setName(String name) {
this.name = name;
public int getAge() {
return age;
public void setAge(int age) {
this.age = age;
}
Student.java
package org.michael.demo.vo;
public class Student extends Person {
private static final long serialVersionUID = 1L;
private float score;
public Student(String id, String name, int age, float score) {
super(id, name, age);
this.setScore(score);
public int compareTo(Object arg0) {
Student s = (Student) arg0;
if (this.score < s.score) {
return 1;
} else if (this.score > s.score) {
return -1;
} else {
if (super.getAge() < s.getAge()) {
return -1;
} else if (super.getAge() > s.getAge()) {
return 1;
return 0;
public String toString() {
return this.getId() + "\t" + this.getName() + "\t" + this.getAge() + "\t" + this.score;
public float getScore() {
return score;
public void setScore(float score) {
this.score = score;
Worker.java
public class Worker extends Person {
private float salary;
public Worker(String id, String name, int age, float salary) {
this.setSalary(salary);
Worker w = (Worker) arg0;
if (this.salary < w.salary) {
} else if (this.salary > w.salary) {
if (super.getAge() < w.getAge()) {
} else if (super.getAge() > w.getAge()) {
return this.getId() + "\t" + this.getName() + "\t" + this.getAge()
+ "\t" + this.salary;
public float getSalary() {
return salary;
public void setSalary(float salary) {
this.salary = salary;
測試:
<a href="http://redking.blog.51cto.com/attachment/200904/2/27212_1238673161DCGQ.png"></a>
<a href="http://redking.blog.51cto.com/attachment/200904/2/27212_1238673169SXju.png"></a>
<a href="http://redking.blog.51cto.com/attachment/200904/2/27212_1238673181yTPS.png"></a>
<a href="http://redking.blog.51cto.com/attachment/200904/2/27212_12386731934UXD.png"></a>
<a href="http://redking.blog.51cto.com/attachment/200903/25/27212_1237987227gWAz.png"></a>
<a href="http://redking.blog.51cto.com/attachment/200903/25/27212_1237987242XNWx.png"></a>
####################Michael分割線###########################
本身顯示的效果并不複雜,但是在此程式中重點是展現了一種程式的設計的分層思路,如果可以做的再好,最好把學生和勞工的操作分開,分别完成。
建立一個專門的:StudentDAO操作
建立一個專門的:WorkerDAO操作
這樣的話通過工廠分别取得兩個接口的執行個體,就可以避免傳遞參數了。
所有的類要分别按不同的包存放,而且在寫代碼的時候必須使用考慮如果萬一修改了該怎麼辦?
####################Michael分割線###########################
<a href="http://bbs.51cto.com/thread-563672-1.html" target="_blank">源代碼下載下傳</a>
#################Michael分割線####################
本文轉自redking51CTO部落格,原文連結:http://blog.51cto.com/redking/145389,如需轉載請自行聯系原作者