范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

二十三种设计模式之模板方法模式

  这是我写二十三种设计模式第二篇文章。这个系列我将持续写下去,欢迎大家关注,点赞和收藏。模板方法模式
  1.模板方法模式(Template Method Pattern)又叫模板模式,在一个抽象的类中,公开定义了要执行的方法的模板。它的子类可以按照需要重写方法实现。但是调用将以抽象类中定义的方法进行。
  2.简单的说,模板方法模式定义一个操作中的算法骨架,将进一步实现的步骤延迟到子类中,使得子类可以不改变一个算法的结构。就可以重定义该算法的某些特定的步骤。
  3.这种类型的设计模式属于行为模式。
  模板方法的UML图
  1.AbstractClass 抽象类,类中事项模板方法,定义了算法骨架,具体需要子类去实现,其他的抽象方法operationr2,3,4
  2.ConcreteClass 事项抽象方法operationr2,3,4
  模板方法来实现豆浆只做问题
  编写豆浆的程序,说明如下,制作豆浆的流程,选材 1.添加配料 2.浸泡 3放在豆浆机打碎添加不同的配料 可以制作各种口味的豆浆选材,浸泡和放在豆浆机打碎这几个步骤对于制作每种口味的豆浆都是一样的(红豆,花生豆浆)
  模板方法的例子代码实现
  1.定义模板类/**  * 抽象类表示豆浆  */ public abstract class SoyaMilk {     //模板方法make ,一般设置成final ,不让子类去覆盖     final void make(){       select();         if (customerChoose()){             addCondiments();         }         soak();         beat();      }      //选材料     void select(){       System.out.println("第一步,选择大豆");     }     //添加不同配料,抽象方法,具体有子类去实现      abstract void addCondiments();     //浸泡,     void soak(){         System.out.println("第三步,黄豆和配料开始浸泡 ,需要3个小时");     }     void beat(){         System.out.println("第四步 ,黄豆和配料打碎");     }    }
  定义子类public class RedBeanMilk extends SoyaMilk{     @Override     void addCondiments() {         System.out.println("加入上好的黄豆");     } }public class PeanutMilk extends SoyaMilk{     @Override     void addCondiments() {         System.out.println("添加上好的花生");     } }
  调用方法。public class Client {      public static void main(String[] args) {         System.out.println("制作红豆豆浆");         SoyaMilk redBeanSoyaMilk = new RedBeanMilk();         redBeanSoyaMilk.make();          System.out.println("制作花生豆浆");         SoyaMilk peanutSoyaMilk = new PeanutMilk();         redBeanSoyaMilk.make();      }  }模板方法模式的钩子方法
  模板方法模式的钩子方法
  1.在模板方法的父类中,我们可以定义一个方法,他默认可以不做任何事情,子类可以视情况要不要覆盖它,该方法称为钩子
  2.还是以上面的制作豆浆的例子来讲解,我们需要制作纯豆浆,不添加任何配料,我们需要用钩子方法对前面的模板进行改造。
  1.给抽象类添加钩子方法。/**  * 抽象类表示豆浆  */ public abstract class SoyaMilk {     //模板方法make ,一般设置成final ,不让子类去覆盖     final void make(){         select();         if (customerChoose()){             addCondiments();         }         soak();         beat();     }      //选材料     void select(){       System.out.println("第一步,选择大豆");     }     //钩子方法 是否要添加配料     boolean customerChoose(){         return true;     }       //添加不同配料,抽象方法,具体有子类去实现      abstract void addCondiments();     //浸泡,     void soak(){         System.out.println("第三步,黄豆和配料开始浸泡 ,需要3个小时");     }     void beat(){         System.out.println("第四步 ,黄豆和配料打碎");     }    }
  子类覆盖钩子方法public class PurSoyaMilk extends SoyaMilk{      @Override     boolean customerChoose() {         return false;     }      @Override     void addCondiments() {      } }SoyaMilk puryMilk = new PurSoyaMilk(); puryMilk.make();
  由此可以看出钩子方法,是返回一个布尔值,决定模板中某个方法要不要执行。
  在springIOC中使用模板方法模式。有机会给这个文章深入剖析一下。

缓解充电烦恼,让新能源汽车发展更畅通随着时代的快速发展,绿色发展理念已经深入人心,人们更加注重生态保护环境建设,追求人与自然的和谐相处。但目前世界能源短缺温室效应等问题愈发明显,而汽车耗能作为温室气体的主要来源,如何四部门2022年新能源汽车补贴标准在2021年基础上退坡30央广网北京1月2日消息工信部消息,财政部工业和信息化部科技部发展改革委近日联合印发关于2022年新能源汽车推广应用财政补贴政策的通知(下文简称通知),明确2022年新能源汽车补贴标互联网卖服务的思路,一切来源生活每个项目都不是那么容易做的,在互联网赚钱,无非就是那么几个版块卖产品卖技术卖服务卖广告。而我今天就是要给你讲讲其中的一个,卖服务。所谓的卖服务,我们生活中就可以见到。外卖快递代驾代首批招生400名校企联手培养新疆人工智能人才来源天山网天山网新疆日报讯(记者赵西娅报道)近日,北上人工智能产业学院在新疆铁道职业技术学院成立。今年,该学院将面向社会招收首批400名人工智能应用技术大数据技术现代通信技术信息安2022年初性价比最高的三款手机,只买对的不买贵的,你知道吗?学长最近在复盘去年大家给学长提的问题,很多朋友最大的误区可能就在价格越高手机就越好,一分钱一分货,但是在手机行业里,特别是在去年,有许许多多的高性价比机型诞生,并且现在正好双旦节狂德国武器制造商Armatix公司发布新型智能手枪美国Armatix公司发布智能手枪ArmatixSmartPistol,该枪是一款0。22口径手枪,采用智能技术,旨在确保用户授权时才能发射。ArmatixSmartPistol的36氪首发短视频一站式创作交易平台神马工场完成1000万元PreA轮融资36氪获悉,短视频一站式创作交易平台神马工场已于近日完成品牌升级(原抖几句)及1000万元PreA轮融资,本轮融资由创业工场领投,凯盈资本等跟投,非凡资本担任财务顾问。另外,其A轮为什么越来越多的年轻人使用现金呢?自从移动支付出现以来,无论是大型商场还是小型商店都可以通过手机进行支付。现在几乎每个人都有智能手机,所以人们使用现金的频率要低得多。尤其是年轻人,他们更喜欢用手机支付。移动支付的优滴,您的支付宝支出3199元,我感觉自己又进新坑了随着小米标志性的铃声响起,雷军开始了他的个人秀,这次他带来了三款最新的机皇小米12。我看完之后,一整个绷不住就下单了,3199买最新的小米12x,安卓旗舰中最新一代的小屏手机,谁看智能马桶哪个品牌好一些?智能马桶起初仅用于医疗和老年保健领域,主要利用洁身功能可有效减少所有人群的肛门疾病以及女性下身部位的细菌感染可能性,大大减少了妇科疾病和肛肠类疾病的患病率。同时按摩功能不同强度的水币安智能链BSC上最受欢迎的5大元宇宙加密币BinanceSmartChain是推出新的加密元宇宙币的最受欢迎的平台之一。BSC费用低,交易速度快,是DeFi和GameFi项目的完美区块链。本文查看币安智能链上最受欢迎的Me
为什么阿里可以频繁的架构调整?(附CEO张勇公开信)11月26日,阿里巴巴集团CEO张勇一纸公开信打破周一市场的平静。阿里巴巴宣布组织架构调整,技术电商等多个核心业务高层变更阿里几乎每一年都会发起一次不小规模的组织架构调整,特别最近今年秋季MacBookPro将迎来六大变化新款MacBookPro有望让Apple的旗舰笔记本电脑焕然一新,并为未来的发布奠定基础。让我们来看看我们可以在下一代MacBookPro中看到什么,以及这些新功能将如何将笔记本电苹果电脑怎么查保修期查询?我相信很多朋友刚拥有Mac计算机或笔记本时,不知道自己机器的保修查询方法。macw小编现给大家带来了这个小入门技巧,请跟随小编观看此教程!我们可以到苹果的官方查询网输入序列号,即可围观中,新的AppleWatch显示屏尺寸和外观早些时候,有媒体报道了即将发布的苹果手表系列7的新细节,包括更大的屏幕尺寸。此前,人们对下一代AppleWatch知之甚少,只知道它显然采用了让人想起iPhone12和iPadPr如何彻底卸载不需要的Mac屏保想知道怎么删除Mac电脑屏保吗?该怎么删除不喜欢的屏保呢?可能很多新接触mac电脑的小伙伴不是很熟悉,本次小编为您带来几种彻底卸载Mac屏保的方法,想知道的小伙伴千万不要错过哦!欢MacOS系统无法连接5gwifi的解决办法,你确定不来看看吗?MBP突然连不上5GWifi,但是用Wifi却可以,用手机平板使用5GWIFI一切正常,是什么问题呢?重启路由器重启电脑路由器刷机路由器恢复出厂设置,一番折腾下来,费时又费力,终于Mac新手必看,这些设置可以让你的Mac更好用如果你刚买了一台新的Mac,不免要对Mac做一些设置,现为你提供一些Mac常用的设置技巧,让你的Mac更加好用。访达设置访达是我们在使用Mac时最常用的应用了,每次打开访达窗口,会解锁Mac上自带的计算机的隐藏功能不要小看macOs的计算器App只要点按几下,你就能发现它简洁外表下潜藏着的强大功能。轻松转换想在人民币与美元公里与英里之间转换?只要输入一个数值,再在转换菜单中选择单位类别(面积iphone13价格官网报价已有,快看是否超出预算目前距离Apple预计揭开新款iPhone13的面纱只有几周的时间,自然而然,越来越多的信息通过非官方渠道成为头条新闻。这一次,轮到iPhone13的价格上网了,因为一份报告显示了新款MacBook带TouchBar如何开机和强制关机新款的MacBook前排的物理按键换成了TouchBar,虽然整体上没太大的变化,但是!但是!如果没有启动,连屏幕都显示不了啊,那怎么开机呢?开启Mac(开机)开启带有TouchB如何在MacOSMonterey中使用实时文本在2021年6月的WWDC上,Apple在MacOSMonterey中宣布了一项名为LiveText的简洁新功能。这使您可以突出显示任何照片中的文本并以多种方式使用它。您可以复制和