元气少女缘结神,相亲2,个人简历表格-hi野兽,健身健美社区,锻炼计划推荐

admin 2019-05-16 阅读:314

模板形式

模板形式(Template Pattern),界说一个操作中算法的骨架,而将一些过程延迟到子类中,模板办法使得子类能够不改动算法的结构,仅仅重界说该算法的某些特定过程。这种类型的规划形式归于行为型形式。

模板形式处理的问题

一些办法通用,却在每一个子类都从头写了这一办法,带来许多重复的代码的问题。相同的部分父类给出一致的模板,不同的部分,子类进行重写。

指令形式形式人物

AbstractTemplate(笼统类):在笼统类中界说了一系列根本操作,这些根本操作能够是详细的,也能够是笼统的,每一个根本操作对应算法的一个过程,在其子类中能够重界说或完结这些过程。一起,在笼统类中完结了一个模板办法(Template Method),用于界说一个算法的结构,模板办法不只能够调用在笼统类中完结的根本办法,也能够调用在笼统类的子类中完结的根本办法,还能够调用其他目标中的办法。

ConcreteTemplate(详细子类):它是笼统类的子类,用于完结在父类中声明的笼统根本操作以完结子类特定算法的过程,也能够掩盖在父类中现已完结的详细根本操作。

模板笼统类办法类型

笼统办法:在笼统类声明、由其详细子类完结。

详细办法:在笼统类中声明并完结,在详细子类中能够承继或重写。

钩子办法:在笼统类中声明并完结(能够是空的完结),子类视状况进行重写掩盖,一般是逻辑判别办法。

模板办法:界说一致模板算法的办法,供给完结办法,子类一般不需求重写。

模板形式和战略形式的差异

模板形式界说了一个一致的算法,子类能够对算法的某一些过程,进行掩盖重写,能够进步代码的复用率。同过承继的办法完结,依靠比较强,不行灵敏。战略形式每个子类都是一种完结,能够彻底不相同,即使算法之间存在共性,也需求在每个子类从头完结,经过聚合的办法完结,能够动态的改动算法,比较灵敏。

代码完结

/**
* 笼统模板
*/
public abstract class Game {
/**
* 详细办法
*/
public void initialize(){
System.out.println("game initialize .........");
}
/**
* 笼统办法
*/
abstract void startPlay();
abstract void endPlay();
/**
* 钩子办法
* @return 是否需求完毕
*/
boolean isNeedEnd(){
return false;
}
/**
* 模板办法
* final润饰 不允许子类修正
* 每一个游戏先初始化、开端游戏 是否需求完毕游戏 依据钩子进行判别
*/
public final void play(){
//初始化游戏
initialize();
//开端游戏
startPlay();
if(isNeedEnd()){
//完毕游戏
endPlay();
}
}
}

------------------------------------------------------

/**
* 详细模板
* 足球游戏
*/
public class Football extends Game{
@Override
void endPlay() {
System.out.println("Football Game Finished!");
}
@Override
void startPlay() {
System.out.println("Football Game Started. Enjoy the game!");
}
@Override
boolean isNeedEnd() {
return false;
}
}

------------------------------------------------------

/**
* 模板测验类
*/
public class TemplateModeTest {
public static void main(String[] args) {
Game game = new Basketball();
game.play();
game = new Football();
game.play();
}
}

运转成果:

JDK和结构中的模板形式

public  T execute(StatementCallback action) throws DataAccessException {
Assert.notNull(action, "Callback object must not be null");
Connection con = DataSourceUtils.getConnection(getDataSource());
Statement stmt = null;
try {
Connection conToUse = con;
if (this.nativeJdbcExtractor != null &&
this.nativeJdbcExtractor.isNativeConnectionNecessaryForNativeStatements()) {
conToUse = this.nativeJdbcExtractor.getNativeConnection(con);
}
stmt = conToUse.createStatement();
applyStatementSettings(stmt);
Statement stmtToUse = stmt;
if (this.nativeJdbcExtractor != null) {
stmtToUse = this.nativeJdbcExtractor.getNativeStatement(stmt);
}
T result = action.doInStatement(stmtToUse);
handleWarnings(stmt);
return result;
}
catch (SQLException ex) {
// Release Connection early, to avoid potential connection pool deadlock
// in the case when the exception translator hasn't been initialized yet.
JdbcUtils.closeStatement(stmt);
stmt = null;
DataSourceUtils.releaseConnection(con, getDataSource());
con = null;
throw getExceptionTranslator().translate("StatementCallback", getSql(action), ex);
}
finally {
JdbcUtils.closeStatement(stmt);
DataSourceUtils.releaseConnection(con, getDataSource());
}
}

------------------------------------------------------

public boolean isSkipResultsProcessing() {
return this.skipResultsProcessing;
}

spring中的JdbcTemplate、RedisTemplate、RestTemplate都是典型的模板形式,都是承继Accessor类和完结Operations接口。

优缺陷

长处:封装不变部分,扩展可变部分。 提取公共代码,便于保护。 行为由父类操控,子类完结。

缺陷:每一个不同的完结都需求一个子类来完结,导致类的个数添加,使得体系愈加巨大。

日子中的指令形式

PPT模板,从网上下载自己喜爱的PPT模板,在不改动大的全体结构的状况下,替换掉部分内容,比方文字内容、部分图片内容,能够很大程度进步产出率。

机器学习中的搬迁学习,也是一个典型的模板形式,机器学习中供给了许多模板模型,VGG19、ResNet50、InceptionV3,假如咱们自己练习这个模型需求花很长的时刻,几周或许更长的时刻,能够把他人练习好的模型作为模板,做一些纤细的调整,去练习咱们自己的样本数据,得到一个合适咱们特有数据的模型,只需求练习比较短的时刻,就能得到一个比较好的模型。

我的启示

模板形式就像站在伟人的膀子上,在大方向上学习他人的经历,进行恰当的调整,以满意咱们自己定制化的需求。当咱们不具备造轮子的才能的时分,合理挑选合适的模板也是一种不错的挑选。