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

网站建设银行北京冬奥会纪念币发行时间四川省建设科技协会网站首页

网站建设银行北京冬奥会纪念币发行时间,四川省建设科技协会网站首页,电商关键词seo排名,有专门做房孑特卖的网站吗一、定义 模版方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 模版方法模式是很常见且很有用的一种模式,理解起来也容易。其优点就是保护了…

一、定义

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

模版方法模式是很常见且很有用的一种模式,理解起来也容易。其优点就是保护了这个算法的结构,重复的步骤在自身实现,一些步骤放给子类去实现,很灵活。

二、实现

以冲泡茶喝咖啡这两种饮料为例,二者都是咖啡因饮料,步骤为

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

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

很明显看到,其中步骤1和3是重复的,步骤2和4是不一样的,基于此我们用模版方法模式来实现

//咖啡因饮料类,就是抽象父类
public abstract class CaffeineBeverage {//制作饮料public final void makeBeverage(){boilWater();brew();pourInCup();addCondiments();}//泡饮料public abstract void brew();//加入调料public abstract void addCondiments();public void boilWater(){System.out.println("烧水");}public void pourInCup(){System.out.println("把饮料倒进杯子中");}
}//咖啡类,具体的实现
public class Coffee extends CaffeineBeverage{@Overridepublic void brew() {System.out.println("冲泡咖啡");}@Overridepublic void addCondiments() {System.out.println("加入糖和牛奶");}
}//茶类,具体的实现
public class Coffee extends CaffeineBeverage{@Overridepublic void brew() {System.out.println("冲泡咖啡");}@Overridepublic void addCondiments() {System.out.println("加入糖和牛奶");}
}

测试:

public class TemplateTest {public static void main(String[] args) {test();}static void test(){CaffeineBeverage coffee = new Coffee();CaffeineBeverage tea = new Tea();System.out.println("======制作咖啡=====");coffee.makeBeverage();System.out.println("=====制作茶=====");tea.makeBeverage();}
}//输出结果
======制作咖啡=====
烧水
冲泡咖啡
把饮料倒进杯子中
加入糖和牛奶
=====制作茶=====
烧水
泡茶
把饮料倒进杯子中
加入柠檬

这样就实现了模版方法模式

三、钩子

钩子是一种被声明在抽象基类中的方法,但是只有空或者默认的实现,子类可以选择是否进行重写钩子函数。

钩子有很多用途,让子类更加灵活地控制算法流程,子类可以选择使用基类默认的钩子方法,也可以自己重写,提高了灵活度。

比如,我们在咖啡因饮料抽象基类中添加一个钩子,来表示是否加入调料。

public abstract class CaffeineBeverage {//制作饮料public final void makeBeverage(){boilWater();brew();pourInCup();if(addCondimentsFlag()){addCondiments();}}//是否加入调料,默认加入public boolean addCondimentsFlag(){return true;}//......
}

咖啡类我们不改变,默认加入,而茶类我们想让用户选择是否加入调料。

public class Tea extends CaffeineBeverage{private boolean addCondimentsFlag = false;public Tea(){}//可以让客户选择是否加入调料public Tea(boolean addCondimentsFlag) {this.addCondimentsFlag = addCondimentsFlag;}@Overridepublic boolean addCondimentsFlag() {return this.addCondimentsFlag;}
}

测试

public class TemplateTest {public static void main(String[] args) {testHook();}static void testHook(){CaffeineBeverage noCondimentsTea = new Tea(false);System.out.println("===不要调料的茶===");noCondimentsTea.makeBeverage();CaffeineBeverage hasCondimentsTea = new Tea(true);System.out.println("===要调料的茶===");hasCondimentsTea.makeBeverage();}
}//输出结果
===不要调料的茶===
烧水
泡茶
把饮料倒进杯子中
===要调料的茶===
烧水
泡茶
把饮料倒进杯子中
加入柠檬
http://www.dtcms.com/wzjs/789267.html

相关文章:

  • 网站建设企业云市场教育培训机构设计图
  • 手机网站制作软件做网站的是什么
  • 做旅游那些网站好moshou wordpress主题
  • 网站外地备案移动app开发技术
  • 网站建设后期需要做什么wordpress的函数
  • 网站建设标准一2023企业所得税300万以上
  • 摄影师常用的网站为什么做企业网站
  • seo顾问服务公司站长互联网公司如何赚钱
  • 高州网站建设公司网站开发程序员
  • 爱站网长尾关键词挖掘工具下载网站免费建站ppa
  • 炫酷企业网站产品报价网
  • 电子商务网站开发过程全球搜索引擎网站
  • html5微网站模板网站建站和项目部署一样吗
  • 网站后台如何修改标题外贸网店
  • 关于网站建设与维护论文wordpress外贸营销插件
  • 汽车便宜网站建设如何建设一个文件分享网站
  • 做哪个视频网站赚钱广州市海珠区建设局网站
  • 源码网站开发html做一个简单的网页
  • 外包网站开发哪家好贵州网站优化公司
  • 二级域名网站怎么建设德持建设集团有限公司网站
  • 山东华邦建设集团网站外贸网站建设行业发展
  • 响应网站建设网站界面设计稿
  • 网站备案号在哪里查询安装wordpress登录时的域名是什么
  • 企业网站管理系统教程百度指数查询入口
  • 哪个网站做浏览器主页国内外优秀室内设计案例
  • 做网站友情链接互换WordPress360收录
  • 泉州市服务好的网站设计镇江网站建设制作公司
  • 优秀网站及网址网站模板 山
  • 万网 成品网站房地产市场营销
  • 青岛外贸网站运营哪家好郑州网站app建设