java设计模式菜鸟教程,java 模板方法

  java设计模式菜鸟教程,java 模板方法

  00-1010模板方法模式模板方法模式使用场景的优缺点总结

  00-1010模板方法定义了一个算法在运算中的骨架,将算法的一些步骤延迟到子类中,让子类在不改变算法结构的情况下重新定义算法的一些具体步骤。

  模板方法模式包含以下主要角色:

  抽象类:负责给出一个算法的轮廓和骨架。它由一个模板方法和几个基本方法组成。模板:定义算法的骨架,按照一定的顺序调用其基本方法。基本方法:是实现算法每一步的方法。方法基本上可以分为三种:抽象方法:一个抽象方法由一个抽象类声明,由它的具体化子类实现。具体方法:具体方法由抽象类或具体类声明和实现,其子类可以被覆盖或直接继承。Hook方法:已经在抽象类中实现,包括判断的逻辑方法和需要被子类覆盖的空方法。一般钩子法是一种用于判断的逻辑方法。这种方法的名字一般是isXxx,返回值类型是boolean。具体类:实现抽象类中定义的抽象方法和钩子方法,它们是顶层逻辑的组成步骤。【案例】

  烹饪步骤是固定的,包括倒油、热油、菜、调料、炒菜等。但是你可以倒入不同的蔬菜和不同的酱料。现在,使用模板方法模式来模拟代码。

  Public类模板测试{ public static void main(string[]args){//炒白菜BaoCai BaoCai=new BaoCai();Bao Cai . cook process();system . out . println(-);//炒白菜BaiCai BaiCai=new BaiCai();baicai . cook process();}}抽象类抽象类{//抽象类//模板方法定义public final void cook process(){ this . pour oil();//倒this . heat oil();//热油this . pourvegetable();//倒菜this . poursauce();//倒入调料this . fry();//stir} public抽象void倒菜();//倒菜就不一样了(一个白菜,一个白菜)public抽象void pourSauce();//倒调料不一样:public void倒油(){system.out.println(倒油);} public void热油(){system.out.println(热油);} public void fry(){ system . out . println(投机);}}类Bao Cai扩展抽象类{ public void pour vegetable(){ system . out . println( add白菜);} public void pour sauce(){ system . out . println(添加辣椒酱);}}类baicai扩展抽象类{public void pour素食(){system.out.println(添加白菜);} public void倒酱(){system.out.println(加盐和味精);} }【运行结果】

  倒油热油加入包菜加入辣椒酱炒啊炒-------------倒油热油加入白菜加入盐和味精炒啊炒

  Process finished with exit code 0

  

目录

优点:

 

  1.提高代码的可重用性。把同一部分代码放在抽象的父类中,不同的代码放在不同的子类中。

  2.实现了反向控制。一个父类调用其子类的操作,通过子类的具体实现来扩展不同的行为,实现了反向控制,符合“开闭原则”。

  缺点:

  1.需要为每个不同的实现定义一个子类,这将导致类的数量增加,系统更大,设计更抽象。

  2.父类中的抽象方法由子类实现,子类执行的结果会影响父类的结果,导致反向控制结构,提高了代码读取的难度。

  00-1010 1.算法的整体步骤是固定的,但是当某些部分是可变的时候,此时可以使用模板方法模式,将可变部分抽象出来,供子类实现。

  2.需要决定父类的算法中的一个步骤是否由子类执行,从而实现子类对父类的反向控制。

  

模板方法模式

本文到此为止。希望它能帮到你,也希望你能多关注更多的盛行它的内容!

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: