最近学习到设计模式,现总结个人学习模板模式内容。
定义:
一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
优缺点
优点
- 1、封装不变部分,扩展可变部分。
- 2、提取公共代码,便于维护。
- 3、行为由父类控制,子类实现。
缺点
每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。如果你是规则设计方的话,只需要设计步骤即可,具体实现各个厂商自己实现就好。
实现
例如这里实现数据库的相关。
定义抽象类
/**
* 数据库连接模板
* @author cc百川
*
*/
public abstract class Jdbc {
public String connect ;//假定这个就是执行器
/**
* 第一步加载驱动
* @return
*/
public abstract void addDriver();
/**
* 第二步连接数据库
*/
public abstract void connectJdbc();
/**
* 执行sql
* @param sql
* @return
*/
public final Object executer(String sql){
this.addDriver();
this.connectJdbc();
System.out.println(this.connect+"正在执行sql语句,sql = "+sql);
this.closeJdbc();
return null;
}
/**
* 第四步关闭连接
*/
public void closeJdbc(){
System.out.println("正在关闭"+this.connect+"连接");
}
}
厂商实现
oracle厂商
import template.jdbc.Jdbc;
/**
* oracle厂商
* @author Administrator
*
*/
public class OracleJdbc extends Jdbc {
@Override
public void addDriver() {
System.out.println("加载oracle的驱动");
}
@Override
public void connectJdbc() {
System.out.println("加载oracle的连接");
this.connect = "oracle";
}
}
mysql厂商
import template.jdbc.Jdbc;
/**
* mysql厂商
* @author cc百川
*
*/
public class MysqlJdbc extends Jdbc{
@Override
public void addDriver() {
System.out.println("加载mysql的驱动");
}
@Override
public void connectJdbc() {
System.out.println("建立mysql的连接");
this.connect = "mmysql的连接";
}
}
等等其他厂商同理实现相关逻辑。
测试
import template.jdbc.mysql.MysqlJdbc;
import template.jdbc.oracle.OracleJdbc;
import template.jdbc.sqlserver.SqlserverJdbc;
public class TestJdbc {
public static void main(String[] args) {
String sql = "select * from test where id = 1";
//racle
Jdbc jdbc = new OracleJdbc();
jdbc.executer(sql);
//mysql
jdbc = new MysqlJdbc();
jdbc.executer(sql);
//sqlserver
jdbc = new SqlserverJdbc();
jdbc.executer(sql);
}
}
模板执行方法设置为final修饰这样保证了执行步骤不被修改。
以上仅为个人学习,如果错误望指出,谢谢。