一共有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;
}
}