经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
模板方法模式
来源:cnblogs  作者:songlingjie  时间:2019/9/19 9:14:28  对本文有异议

模板方法模式

在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。

优点:

  1. 封装不变部分,扩展可变部分。
  2. 提取公共代码,便于维护。
  3. 行为由父类控制,子类实现。

缺点:

每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

使用场景:

  1. 有多个子类共有的方法,且逻辑相同。
  2. 重要的、复杂的方法,可以考虑作为模板方法。

类图如下

实例代码

  1. package com.jack.idea.test.designmode;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Calendar;
  4. import java.util.Date;
  5. /**
  6. * 模板方法模式
  7. *
  8. * @author ljs.song
  9. * @date 2018-01-02 15:22
  10. */
  11. public class Template {
  12. public static void main(String[] args) {
  13. Calendar calendar = Calendar.getInstance();
  14. //季度分享电影短片开始 顺序回顾每个人的分享流程
  15. ShareTemp xiaojieShare = new XiaoJieShare();
  16. xiaojieShare.share(calendar.getTime(),"三楼接待室");
  17. ShareTemp xiaochenshare = new XiaoChenShare();
  18. calendar.set(Calendar.DAY_OF_MONTH,10);
  19. xiaochenshare.share(calendar.getTime(),"总裁办公室");
  20. ShareTemp xiaolongShare = new XiaoLongShare();
  21. calendar.set(Calendar.HOUR_OF_DAY,23);
  22. xiaolongShare.share(calendar.getTime(),"宇宙中心");
  23. }
  24. }
  25. /**
  26. * 分享模板抽象类
  27. */
  28. abstract class ShareTemp{
  29. private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH");
  30. private Date date;
  31. private String location;
  32. public void share(Date date,String location){
  33. //步骤1 首先预定时间和场地
  34. getTime(date,location);
  35. //步骤2 开始真正的分享
  36. shareContent();
  37. //步骤3 分享结束,讨论并关闭投影仪
  38. end();
  39. }
  40. /**
  41. * 步骤1 ,预定时间和地点 当然这些也可以作为抽象方法
  42. */
  43. private void getTime(Date date,String location){
  44. System.out.println("1. 我想在" + SIMPLE_DATE_FORMAT.format(date) + " ,在" + location + "发起分享,欢迎来看");
  45. }
  46. /**
  47. * 需要子类具体实现
  48. */
  49. abstract void shareContent();
  50. private void end(){
  51. System.out.println("3. 我今天的分享到这里,谢谢大家");
  52. System.out.println("*************关闭投影****************************");
  53. }
  54. }
  55. /**
  56. * 小杰分享
  57. */
  58. class XiaoJieShare extends ShareTemp{
  59. @Override
  60. void shareContent() {
  61. System.out.println("2. 我今天分享的内容是设计模式");
  62. }
  63. }
  64. /**
  65. * 小龙分享
  66. */
  67. class XiaoLongShare extends ShareTemp{
  68. @Override
  69. void shareContent() {
  70. System.out.println("2. 我今天分享的内容是自动化测试");
  71. }
  72. }
  73. /**
  74. * 小臣分享
  75. */
  76. class XiaoChenShare extends ShareTemp{
  77. @Override
  78. void shareContent() {
  79. System.out.println("2. 我今天分享的内容是变成规范之我见");
  80. }
  81. }

转载请注明出处 阿布的夏天

原文链接:http://www.cnblogs.com/jackslj/p/11541007.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号