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

安徽省建设工程安全+协会网站网站怎么开通微信支付

安徽省建设工程安全+协会网站,网站怎么开通微信支付,建一个网站 服务器机房托管价格,网络做广告的公司一、定义 模版方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 模版方法模式是很常见且很有用的一种模式,理解起来也容易。其优点就是保护了…

一、定义

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

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

二、实现

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

茶: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/a/437264.html

相关文章:

  • 衡水市建设局网站wordpress4.94主题上传不显示
  • 建设学校网站的意义哈尔滨网络公司新闻
  • 网站开发 职位描述冯站长之家官网
  • 咋自己做网站wordpress auto highslide
  • 房地产营销门户网站建设宣传推广费用预算
  • 制作一个链接网站咨询工程师
  • 网站关键词优化推广兰州百度公司网站建设
  • 团购网站及域名什么是网络设计平台
  • 做乡镇网站什么语言做网站好
  • 长沙网站建设qq交流群百度世界排名
  • 如何用织梦程序制作多个页面网站自己做服务器网站
  • 淮安做网站seo如何做网站安全加固
  • 杭州专业网站设计西安网站开发公司地址
  • 站长工具 seo查询免费的网页域名
  • 昆明专业网站营销如何恢复wordpress主题初始内容
  • 淘宝做短视频网站成都网站建设服务有什么
  • 整站seo运营在线音乐网站 用什么做
  • 如何网站seo徐州做网站哪里好
  • 品牌建设网站特点网上发布信息的平台有哪些
  • 郴州市北湖建设局网站免费友链互换
  • 一次性付费做网站网站建设除了中企动力
  • 企业网站自己可以做服装企业的网站建设
  • 线在成都网站推广公司可以商用的图片网站
  • 做网站域名备案需要多久ip开源网站fpga可以做点什么用
  • 常州企业建站系统模板ps在线网站
  • 怎样建设网站官网竞价网络推广托管
  • 网站建设 比选怎么让客户做网站
  • 网站开发需要的技能设计工作室logo创意
  • 做私单的网站行业门户网
  • 传媒大气的网站云空间网站开发