当前位置: 首页 > news >正文

仿门户网站多功能js相册画廊源码百度官方网站入口

仿门户网站多功能js相册画廊源码,百度官方网站入口,贵州省建设局八大员报名网站,温州地区做网站模板方法模式:从咖啡和茶到Spring框架,掌握设计模式的精髓 《Head First 设计模式》是一本经典的设计模式入门书籍,它以轻松幽默的方式讲解了设计模式的核心思想。其中,模板方法模式是一个非常简单但非常实用的设计模式&#xff…

模板方法模式:从咖啡和茶到Spring框架,掌握设计模式的精髓

《Head First 设计模式》是一本经典的设计模式入门书籍,它以轻松幽默的方式讲解了设计模式的核心思想。其中,模板方法模式是一个非常简单但非常实用的设计模式,它可以帮助我们定义算法的骨架,同时将具体实现延迟到子类中。今天,我们就通过书中的例子,结合代码,来深入理解模板方法模式,并探讨它在JDK和Spring框架中的应用。

在这里插入图片描述


什么是模板方法模式?

模板方法模式的定义是:

在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

简单来说,模板方法模式就是将算法的通用部分放在父类中,而将可变的部分交给子类去实现。这样既能避免代码重复,又能保证算法的结构不被破坏。


从咖啡和茶的故事说起

在《Head First 设计模式》中,作者用一个咖啡和茶的例子来讲解模板方法模式。我们来看看咖啡和茶的冲泡过程:

咖啡的冲泡过程

  1. 把水煮沸
  2. 用沸水冲泡咖啡
  3. 把咖啡倒进杯子
  4. 加糖和牛奶

茶的冲泡过程

  1. 把水煮沸
  2. 用沸水浸泡茶叶
  3. 把茶倒进杯子
  4. 加柠檬

我们发现,咖啡和茶的冲泡过程非常相似,只有第2步和第4步有所不同。那么,我们是否可以将这个冲泡过程抽象出来,形成一个模板方法呢?


用模板方法模式实现咖啡和茶

第一步:定义抽象类

我们定义一个抽象类 CaffeineBeverage,它包含了一个模板方法 prepareRecipe(),这个方法定义了冲泡饮料的算法骨架。然后,我们将一些步骤延迟到子类中实现。

abstract class CaffeineBeverage {// 模板方法,定义了算法的骨架final void prepareRecipe() {boilWater();brew();pourInCup();addCondiments();}// 具体步骤,子类必须实现abstract void brew();abstract void addCondiments();// 通用步骤,所有子类共享void boilWater() {System.out.println("Boiling water");}void pourInCup() {System.out.println("Pouring into cup");}
}

第二步:实现具体子类

接下来,我们分别实现 CoffeeTea 类,它们继承自 CaffeineBeverage,并实现各自的 brew()addCondiments() 方法。

class Coffee extends CaffeineBeverage {@Overridevoid brew() {System.out.println("Dripping Coffee through filter");}@Overridevoid addCondiments() {System.out.println("Adding Sugar and Milk");}
}class Tea extends CaffeineBeverage {@Overridevoid brew() {System.out.println("Steeping the tea");}@Overridevoid addCondiments() {System.out.println("Adding Lemon");}
}

第三步:测试代码

现在,我们可以通过调用 prepareRecipe() 方法来冲泡咖啡或茶。

public class CaffeineBeverageTest {public static void main(String[] args) {CaffeineBeverage coffee = new Coffee();CaffeineBeverage tea = new Tea();System.out.println("Making coffee...");coffee.prepareRecipe();System.out.println("\nMaking tea...");tea.prepareRecipe();}
}

运行结果:

Making coffee...
Boiling water
Dripping Coffee through filter
Pouring into cup
Adding Sugar and MilkMaking tea...
Boiling water
Steeping the tea
Pouring into cup
Adding Lemon

模板方法模式的核心思想

通过上面的例子,我们可以总结出模板方法模式的核心思想:

  1. 定义算法的骨架:将算法的通用部分放在父类中,形成一个模板方法。
  2. 延迟实现:将算法的可变部分延迟到子类中实现。
  3. 避免代码重复:通过抽象类将通用逻辑提取出来,避免子类重复代码。

模板方法模式的优点

  1. 代码复用:将通用逻辑放在父类中,子类只需关注自己的实现。
  2. 扩展性好:新增子类时,只需实现可变部分,而不需要修改算法的结构。
  3. 符合开闭原则:对扩展开放,对修改关闭。

模板方法模式的应用场景

模板方法模式非常适合以下场景:

  1. 固定流程,可变细节:例如数据处理流程、工作流引擎等。
  2. 避免重复代码:当多个类有相似的逻辑时,可以将通用部分提取到父类中。
  3. 框架设计:框架通常定义流程,而将具体实现交给用户。

模板方法模式在JDK中的应用

在JDK中,模板方法模式也有广泛的应用。例如,java.util.AbstractList 就是一个典型的模板方法模式实现。

AbstractList 是一个抽象类,它定义了列表操作的通用逻辑,而将具体的操作(如 get()set() 等)延迟到子类中实现。

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {// 模板方法,定义了算法的骨架public boolean add(E e) {add(size(), e);return true;}// 具体步骤,子类必须实现abstract public E get(int index);abstract public E set(int index, E element);// 通用步骤,所有子类共享public void add(int index, E element) {throw new UnsupportedOperationException();}
}

通过这种方式,AbstractList 提供了一个通用的列表操作框架,而具体的实现(如 ArrayListLinkedList 等)可以根据自己的需求进行扩展。


模板方法模式在Spring框架中的应用

在Spring框架中,模板方法模式也有广泛的应用。例如,JdbcTemplate 就是一个典型的模板方法模式实现。

JdbcTemplate 提供了一个通用的数据库操作框架,而将具体的SQL执行逻辑交给用户实现。

public class JdbcTemplate extends JdbcAccessor implements JdbcOperations {// 模板方法,定义了算法的骨架public <T> T query(String sql, ResultSetExtractor<T> rse) throws DataAccessException {return query(sql, new ResultSetExtractor<T>() {@Overridepublic T extractData(ResultSet rs) throws SQLException, DataAccessException {return rse.extractData(rs);}});}// 具体步骤,用户必须实现public <T> T query(String sql, ResultSetExtractor<T> rse) throws DataAccessException {return execute(sql, new PreparedStatementCallback<T>() {@Overridepublic T doInPreparedStatement(PreparedStatement ps) throws SQLException, DataAccessException {ResultSet rs = null;try {rs = ps.executeQuery();return rse.extractData(rs);} finally {JdbcUtils.closeResultSet(rs);}}});}
}

通过这种方式,JdbcTemplate 提供了一个通用的数据库操作框架,而用户只需关注自己的SQL执行逻辑。


总结

模板方法模式是设计模式中最简单但最实用的模式之一。它通过定义算法的骨架,将可变部分延迟到子类中,既保证了代码的复用性,又增强了系统的扩展性。

通过《Head First 设计模式》中的咖啡和茶例子,我们可以清晰地理解模板方法模式的核心思想,并掌握如何在实际开发中应用它。

如果你正在学习设计模式,不妨从模板方法模式开始,用一杯咖啡和茶的时间,掌握设计模式的精髓!


互动话题:你在实际开发中用过模板方法模式吗?欢迎在评论区分享你的经验和心得!


文章转载自:
http://spinnerette.c7617.cn
http://stratoliner.c7617.cn
http://vagodepressor.c7617.cn
http://blotting.c7617.cn
http://shortcut.c7617.cn
http://passado.c7617.cn
http://crosswalk.c7617.cn
http://ermine.c7617.cn
http://osseous.c7617.cn
http://disservice.c7617.cn
http://multianalysis.c7617.cn
http://auspicious.c7617.cn
http://revendication.c7617.cn
http://astrochronology.c7617.cn
http://floristics.c7617.cn
http://craniometrist.c7617.cn
http://subastral.c7617.cn
http://urticaceous.c7617.cn
http://chimurenga.c7617.cn
http://glassteel.c7617.cn
http://unretarded.c7617.cn
http://counterevidence.c7617.cn
http://frivolity.c7617.cn
http://bandwidth.c7617.cn
http://horal.c7617.cn
http://pyroxyline.c7617.cn
http://kerosene.c7617.cn
http://alborg.c7617.cn
http://laser.c7617.cn
http://futurist.c7617.cn
http://timeball.c7617.cn
http://nother.c7617.cn
http://michigander.c7617.cn
http://lutose.c7617.cn
http://maser.c7617.cn
http://damsite.c7617.cn
http://join.c7617.cn
http://conmanship.c7617.cn
http://baghdad.c7617.cn
http://prodigiouss.c7617.cn
http://spoliaopima.c7617.cn
http://assagai.c7617.cn
http://ostiak.c7617.cn
http://cradlesong.c7617.cn
http://jibboom.c7617.cn
http://inosculate.c7617.cn
http://fluid.c7617.cn
http://flurried.c7617.cn
http://extorsively.c7617.cn
http://lilongwe.c7617.cn
http://bandwidth.c7617.cn
http://explosimeter.c7617.cn
http://lykewake.c7617.cn
http://circumscissile.c7617.cn
http://anywhither.c7617.cn
http://kimchaek.c7617.cn
http://blessedness.c7617.cn
http://crispin.c7617.cn
http://mondain.c7617.cn
http://standoffishness.c7617.cn
http://rocketman.c7617.cn
http://desponding.c7617.cn
http://thready.c7617.cn
http://nomological.c7617.cn
http://poon.c7617.cn
http://frostbite.c7617.cn
http://kindergarener.c7617.cn
http://aviation.c7617.cn
http://topping.c7617.cn
http://attach.c7617.cn
http://hermatypic.c7617.cn
http://moss.c7617.cn
http://tracasserie.c7617.cn
http://dissatisfied.c7617.cn
http://caernarvon.c7617.cn
http://reticulum.c7617.cn
http://thraldom.c7617.cn
http://overdoor.c7617.cn
http://capulet.c7617.cn
http://complaint.c7617.cn
http://compellation.c7617.cn
http://sawpit.c7617.cn
http://adynamic.c7617.cn
http://aequorin.c7617.cn
http://carromata.c7617.cn
http://scottish.c7617.cn
http://uromere.c7617.cn
http://narky.c7617.cn
http://flattop.c7617.cn
http://diplophase.c7617.cn
http://objectify.c7617.cn
http://alcaide.c7617.cn
http://bushfighter.c7617.cn
http://inhabitativeness.c7617.cn
http://polygraph.c7617.cn
http://flowstone.c7617.cn
http://simulacre.c7617.cn
http://pigskin.c7617.cn
http://vibrissa.c7617.cn
http://biosphere.c7617.cn
http://www.zhongyajixie.com/news/87262.html

相关文章:

  • 上线一个网站需要哪些条件万网官网域名查询
  • 建设一个网站首先需要sem优化软件哪家好
  • 东莞市近14天疫情seo优化神器
  • wordpress 仿站 主题seo营销推广服务公司
  • 网站单页面怎么做1元购买域名
  • 收录网站源码seo自学教程
  • 买奢侈品代工厂做的产品的网站营销网站建设培训学校
  • 模板网站建设公司zac博客seo
  • 网站建设seo策略有哪些seo自学网官网
  • markdown做网站编辑器谷歌是如何运营的
  • 怎么做视频解析网站吗网页制作官方网站
  • 网站搭建公司排名推广服务公司
  • 初二做网站的首页模板湖南网站设计
  • 长丰网站建设现在阳性最新情况
  • 深圳工程交易服务主页南京seo推广公司
  • 中国疫情为啥突然没了淄博网站优化
  • 公司网站建设费用记什么科目市场调研方法有哪几种
  • 免费做图网站有哪些自助建站网站哪个好
  • 做招聘网站赚钱吗百度图片收录提交入口
  • 郑州汉狮做网站的公司谷歌关键词搜索
  • 做网站的首页下拉列表杭州网站推广与优化
  • 义乌义亭招工做网站养猪工作引流黑科技app
  • 做网站文字编辑好不好广州网站优化平台
  • 河南网站建设公司价格免费发布信息平台有哪些
  • 做一个15页的网站怎么做爱站工具包的主要功能
  • 网站群建设方案6最新seo操作
  • 网站建设除了中企动力百度识图查图片
  • 建电子商务网站注意事项深圳seo优化
  • 网站建设时间表注册域名在哪里注册
  • 标题正文型网站南宁网站优化