博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模板设计模式
阅读量:6150 次
发布时间:2019-06-21

本文共 1964 字,大约阅读时间需要 6 分钟。

hot3.png

     在程序开发中你可能经常遇到这种情况,某个要实现的算法分为多个步骤,有些步骤是固定不变的,有些步骤是不固定的,为了提高代码的可扩展性和可维护性,模板设计模式在这种场景下就派上用场了。

    在模板设计模式中,一个算法可以分为多个步骤,每个步骤对应一个方法称为基本方法,步骤的执行顺序是在一个模板方法中定义好的,有些基本方法是固定不变的,有些基本方法是不固定的。在模板设计模式中,模板方法和固定不变的基本方法会在父类中实现,而不固定的基本方法在父类中是抽象方法,其实现被延迟到子类中完成。

3e44090e5242345fcef5bcc3e3ab696b8fa.jpg

如上图所示,在抽象类AbstractClass中Operation_4()方法是固定的基本方法,其实现在父类中。而Operation_2、Operation_3()、Operation_5()是不固定的基本方法,所以在父类中是抽象方法,需要子类去实现。

/*********************************************************************** * Module:  AbstractClass.java * Author:  Administrator * Purpose: Defines the Class AbstractClass ***********************************************************************/import java.util.*;public abstract class AbstractClass {      public void template() {      // TODO: implement   }         public abstract void operation();      public abstract void operation3();      public void operation4() {      // TODO: implement   }         public abstract void operation5();}

 

/*********************************************************************** * Module:  ConcreteClass1.java * Author:  Administrator * Purpose: Defines the Class ConcreteClass1 ***********************************************************************/import java.util.*;public class ConcreteClass1 extends AbstractClass {      public void operation() {      // TODO: implement   }         public void operation3() {      // TODO: implement   }         public void operation5() {      // TODO: implement   }}

 

/*********************************************************************** * Module:  ConcerteClass2.java * Author:  Administrator * Purpose: Defines the Class ConcerteClass2 ***********************************************************************/import java.util.*;public class ConcerteClass2 extends AbstractClass {      public void operation() {      // TODO: implement   }         public void operation3() {      // TODO: implement   }         public void operation5() {      // TODO: implement   }}

 

转载于:https://my.oschina.net/u/3865831/blog/2980849

你可能感兴趣的文章
关于C#导出 文本文件
查看>>
使用native 查询时,对特殊字符的处理。
查看>>
maclean liu的oracle学习经历--长篇连载
查看>>
ECSHOP调用指定分类的文章列表
查看>>
分享:动态库的链接和链接选项-L,-rpath-link,-rpath
查看>>
Javascript一些小细节
查看>>
禁用ViewState
查看>>
Android图片压缩(质量压缩和尺寸压缩)
查看>>
nilfs (a continuent snapshot file system) used with PostgreSQL
查看>>
【SICP练习】150 练习4.6
查看>>
HTTP缓存应用
查看>>
KubeEdge向左,K3S向右
查看>>
DTCC2013:基于网络监听数据库安全审计
查看>>
CCNA考试要点大搜集(二)
查看>>
ajax查询数据库时数据无法更新的问题
查看>>
Kickstart 无人职守安装,终于搞定了。
查看>>
linux开源万岁
查看>>
linux/CentOS6忘记root密码解决办法
查看>>
25个常用的Linux iptables规则
查看>>
集中管理系统--puppet
查看>>