模块方法模式是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为。

UML图:

具体代码:

/**
* 抽象-模块方法模式核心
*/
public abstract class AbstractPage {
public abstract void makeHeader();//组装页面头部
public abstract void makeBody();//组装页面body
public abstract void makeFooter();//组装页脚 public void make(){
makeHeader();//组装头
makeBody();//组装身
makeFooter();//组装脚
}
}
/**
* 页面1
*/
public class Page1 extends AbstractPage{
@Override
public void makeHeader() {
System.out.println("页面1,写头");
} @Override
public void makeBody() {
System.out.println("页面1,写身");
} @Override
public void makeFooter() {
System.out.println("页面1,写脚");
}
}
/**
* 页面2
*/
public class Page2 extends AbstractPage{
@Override
public void makeHeader() {
System.out.println("页面2,写头");
} @Override
public void makeBody() {
System.out.println("页面2,写身");
} @Override
public void makeFooter() {
System.out.println("页面2,写脚");
}
}
public class Main {
public static void main(String[] args) {
AbstractPage page1 = new Page1();
page1.make();//页面1拼装 System.out.println("---------------------------"); AbstractPage page2 = new Page2();
page2.make();//页面2拼装
}
}

结果:

页面1,写头
页面1,写身
页面1,写脚
---------------------------
页面2,写头
页面2,写身
页面2,写脚

应用场景:

1.具有统一的操作步骤或操作过程

2.具有不同的操作细节

3.存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同

源码地址:https://github.com/qjm201000/design_pattern_templateMethod.git

最新文章

  1. 用sql 语句给字段添加描述
  2. JCreator的配置
  3. WCF初探-11:WCF客户端异步调用服务
  4. [Toolchain]arm-none-linux-gnueabin编译
  5. codeforces 442C C. Artem and Array(贪心)
  6. FileUpload之FileItem
  7. python3生成标签云
  8. 定时器Timer
  9. LintCode 子树
  10. POJ 2252 Dungeon Master 三维水bfs
  11. PowerDesigner跟表的字段加注释
  12. JAVA学习(二):JDK介绍及其结构、用途
  13. LinbDesk --- 新的extjs4.2 desktop demo : 技术交流Q群:336584192
  14. 生产者/消费者问题的多种Java实现方式
  15. log4j日志框架的使用
  16. hightopo学习之旅一 -- 节点动画
  17. 用css巧妙实现移动端横向滑动展示功能
  18. 解决ArrayList线程不安全
  19. datatabale 服务器分页
  20. Maven让资源文件处理插件能够解析资源文件中的Maven属性

热门文章

  1. HDOJ 2189 悼念512四川汶川大地震遇难者——来生一起走 【生成函数】
  2. mac 安装使用Liteide
  3. 在Docker中创建Mongo容器的后续设置
  4. Vmware 占用宿主机硬盘空间只增不减
  5. ASP.NET Core 2 学习笔记(一)开始
  6. 在 __CC_ARM 编译器环境下,使用$Sub$$ 与 $Super$$ 的“补丁”功能
  7. win10 uwp 如何打包Nuget给其他人
  8. Visual Studio 2017报表RDLC设计器与工具箱中Report Viewer问题
  9. Cannot read property 'substring' of undefined
  10. C++/CLI 中使用 ref 和 out