模板模式小叙

在一个多月的学习中,老师提到过很多设计模式,工厂设计模式,策略设计模式,模板设计模式,包装设

计模式......,今天说一下感触最深的模板设计模式。顾名思义,模板就是一个模型,只不过这个模型可

以根据你自己的需要实现不同的功能,我们也可以将一些固定的,使用频率较高的代码放在这个模型里,

什么意思呢?就是说如果我们用模板模式设计一个类的时候,就为这个类定义一个抽象方法,可以根据不

同的需要来实现这个抽象方法!
例如,在用JDBC时,连接数据库和的代码是千篇一律的,但是对数据库的操作却在经常变化,这个时候,

我们就可以用模板设计模式设计一个抽象类,其中包括两个方法!一个是连接数据库的execute()(即固

定的代码),所有这个抽象类的子类都可以用这个方法,节省了不少宝贵的时间,另一个是执行对数据库

操作的abstract doExecute(),为什么要定义成abstract呢?因为我们对数据库的操作是不固定的,有时

要查询,有时要更新,有时要插入,有了这个方法,就可以写一个类来继承这个抽象类,实现这个抽象方

法,然后根据需要来对数据进行筛选和更新,这也更符合面向对象的原理!
还是用程序来说明问题
1、定义一个抽象类
 abstract class DbTemplate
{
 Connection conn = null;
 configurer config = null;
        //用于实现不同功能的抽象方法
 abstract void doExecuteQuery(Connection conn);
 public void setConfig(configurer config)
 {
  this.config = config;
 }
        //实现相同功能的方法
 public void execute()
 {
     BasicConfigurator.configure();
     Log log = LogFactory.getLog(DbTemplate.class);   
     
  //读取属性文件中设定的关于连接数据库的属性值
     String driver = config.getProperty("jdbc.driver");
     String url = config.getProperty("jdbc.url");
     String users = config.getProperty("jdbc.user");
     String pass = config.getProperty("jdbc.password");
     try {
   Class.forName(driver);
  } catch (ClassNotFoundException e) {
   // TODO 自动生成 catch 块
   log.error("指定的Jdbc驱动程序找不到!");
  }
     try {
                        // 用得到的属性值获得连接
   conn = DriverManager.getConnection(url,users,pass);
  } catch (SQLException e) {
   // TODO 自动生成 catch 块
   log.error("连接数据库出错!");
  }
 }
 
}
2、一个继承了上述抽象类的类
public class AbstractDemo extends DbTemplate
{
 //Connection conn = null;
 ResultSet rs = null;
 PreparedStatement pstmt = null;
        //父类抽象方法的实现
 void doExecuteQuery(String name,String pass) 
 {
  // TODO 自动生成方法存根
  execute();
  BasicConfigurator.configure();
   Log log = LogFactory.getLog(AbstractDemo.class);
  

   try {
    pstmt = conn.prepareStatement("select * from users where

name=? and pass=?");
   } catch (SQLException e1) {
    // TODO 自动生成 catch 块
    log.error("请检查你的语句是否有错!");
   }
   try {
    pstmt.setString(1,name);
   } catch (SQLException e1) {
    // TODO 自动生成 catch 块
    log.error("请确认用户名是否有误!");
   }
   try {
    pstmt.setString(2,pass);
   } catch (SQLException e1) {
    // TODO 自动生成 catch 块
    log.error("请确认密码是否错误!");
   }
  
  
  try {
   rs = pstmt.executeQuery();
  } catch (SQLException e) {
   // TODO 自动生成 catch 块
   log.error("执行语句时出错!");
  }
  try {
   if(rs.next())
   {
    log.info("欢迎登录!");
   }
   else
   {
    log.error("用户名或密码错误!");
   }
  } catch (SQLException e) {
   // TODO 自动生成 catch 块
   log.error("生成记录集时出错!");
  }
 }
上面这个程序是模拟用户登录时的用户名和密码校验的,我们还可以定写一些子类来继承上面的抽象类,

用来实现用户注册,用户名或密码的更改,以及用户查询等等功能,代码是一样的,你只需要根据情况调

整你的SQL语句。当然,我们只是为了说明模板设计模式的设计思想,程序还需要进一步完善。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值