一共有23種設計模式
總體來說設計模式分爲三大類:
創建型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
結構型模式,共七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
行爲型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式。
單例模式:爲了解決只創建唯一一個類
解決辦法:不能創建公共的方法,創建一個靜態的方法,在多線程的環境下有問題,可以有一系列的解決辦法
dao全稱是data access object,數據訪問對象
主要的功能就是用於進行數據操作的,在程序的標準開發架構中屬於數據層的操作
一個典型的dao模式應該包括的部分有
vo:值對象 value object
dao接口:封裝所有的數據的操作
面向接口編程的主要優點就是:1.高內聚,低耦合;2.易於程序擴展和維護;
對擴展開放,對修改關閉
dao實現類:
將定義和實現分開,這麼做最大的優點就是解耦,降低程序的耦合性
dao工廠:用來創建dao對象
把對數據的各種操作封裝
例:對圖書表進行操作的dao
vo:book//映射
bookid,bookname,price
dao:bookdao//操作
void insert();
void delete();
void update();
void select();
1.定義一個Sys_user 類(vo);
含有數據庫表中的字段
package vo;
public class Sys {
Integer userid;
String username;
Integer remain;
public Sys(String username, Integer remain) {
super();
this.username = username;
this.remain = remain;
}
public Sys() {
super();
}
public Integer getUserid() {
return userid;
}
public void setUserid(Integer userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getRemain() {
return remain;
}
public void setRemain(Integer remain) {
this.remain = remain;
}
@Override
public String toString() {
return "Sys [userid=" + userid + ", username=" + username + ", remain=" + remain + "]";
}
}
定義一個dao接口
package dao;
import java.util.List;
import vo.Sys;
/*
* 對Sys_user對象各種操作的封裝
*/
public interface SysDao {
void delete(Integer userid);
List<Sys> getAll();
void insert(Sys s);
boolean update(Sys s);
Sys getSysById(Integer userid);
}
定義實現類
package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import util.JdbcUtil;
import vo.Sys;
public class Sys_userDaoImpl implements SysDao {
@Override
public void insert(Sys s) {
// TODO Auto-generated method stub
//
String sql = "insert into Sys_user values(null,?,?)";
try(Connection conn = JdbcUtil.getConnections();
PreparedStatement ps= conn.prepareStatement(sql))
{
ps.setString(1, s.getUsername());
ps.setInt(2, s.getRemain());
ps.execute();
System.out.println("插入一個賬戶:"+s);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void delete(Integer userid) {
// TODO Auto-generated method stub
String sql="delete from Sys_user where userid = ?";
try(Connection conn = JdbcUtil.getConnections();
PreparedStatement ps= conn.prepareStatement(sql))
{
ps.setInt(1, userid);
ps.execute();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("刪除成功");
}
@Override
public boolean update(Sys s) {
// TODO Auto-generated method stub
int b=0;
String sql = "update Sys_user set userName=?,remain=? where userid = ?";
try(Connection conn = JdbcUtil.getConnections();
PreparedStatement ps= conn.prepareStatement(sql))
{
ps.setString(1, s.getUsername());
ps.setInt(2, s.getRemain());
ps.setInt(3, s.getUserid());
b= ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("更新成功!");
return b>0?true:false;
}
}
重複的代碼過多:
對方法進行重構;改變方法裏邊的內容,不影響用戶使用
不重複的地方只有sql語句
1.5版本的新特性 可變參數
優化後:
package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class JdbcUtil {
static String url="jdbc:mysql://localhost:3306/java1114";
static String user="root";
static String password="root";
static
{
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getConnections()
{
try {
return DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
* 執行一個sql
* @param sql
* @param args;sql語句需要綁定的參數值
* @return
*/
public static int executeSql(String sql,Object...args) {
int count = 0;
try(Connection conn = JdbcUtil.getConnections();
PreparedStatement ps = conn.prepareStatement(sql)){
for(int i=0;i<args.length;i++) {
ps.setObject(i+1, args[i]);
}
count = ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return count;
}
}
package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import util.JdbcUtil;
import vo.Sys;
public class SysDaoImpl implements SysDao {
String sql_insert = "insert into Sys_user values(null,?,?)";
String sql_delete="delete from Sys_user where userid = ?";
String sql_update = "update Sys_user set userName=?,remain=? where userid = ?";
@Override
public void insert(Sys s) {
// TODO Auto-generated method stub
JdbcUtil.executeSql(sql_insert, s.getUsername(),s.getRemain());
System.out.println("插入成功!"+s);
}
@Override
public void delete(Integer userid) {
// TODO Auto-generated method stub
JdbcUtil.executeSql(sql_delete, userid);
System.out.println("刪除成功!"+userid);
}
@Override
public boolean update(Sys s) {
// TODO Auto-generated method stub
if(JdbcUtil.executeSql(sql_update, s.getUsername(),s.getRemain(),s.getUserid())!=0)
return true;
return false;
}
}