• 设计模式 模板方法模式(模板找女朋友/男朋友)


     模板方法模式属于行为模式。

    抽象类定义了一个模板,不变的部分放在模板里,具体实现(可变的部分)由子类来做。

    模板方法行为由父类来控制,子类负责实现。

    模板方法提供了一个很好的代码复用平台。

    当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别的步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。

    定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。

    以找朋友为例,找朋友通常分为四个步骤。

    找男朋友和找女朋友都是四个步骤,这是它们相同的地方,相同的地方放在模板里。

    不同的地方是找男朋友和找女朋友每个步骤里的详细内容不同,这是可变的部分,可变的部分放在子类来实现。

    看下代码

    模板

    1. package com.qing.template;
    2. public abstract class GetFriendTemplate {
    3. protected abstract void step1();
    4. protected abstract void step2();
    5. protected abstract void step3();
    6. protected abstract void step4();
    7. public void findFriend(){
    8. System.out.println("开始找对象");
    9. step1();
    10. step2();
    11. step3();
    12. step4();
    13. System.out.println("结束找对象");
    14. }
    15. }

     找女朋友

    1. package com.qing.template;
    2. public class GetGirlfriend extends GetFriendTemplate{
    3. @Override
    4. protected void step1() {
    5. System.out.println("得到妹子的联系方式");
    6. }
    7. @Override
    8. protected void step2() {
    9. System.out.println("注重自己的个人形象,展示自己的优点。");
    10. }
    11. @Override
    12. protected void step3() {
    13. System.out.println("吸引妹子的注意力,持续做能引起妹子好感的事情。");
    14. }
    15. @Override
    16. protected void step4() {
    17. System.out.println("暗示及表白");
    18. }
    19. }

     找男朋友

    1. package com.qing.template;
    2. public class GetBoyfriend extends GetFriendTemplate{
    3. @Override
    4. protected void step1() {
    5. System.out.println("得到小哥哥的联系方式");
    6. }
    7. @Override
    8. protected void step2() {
    9. System.out.println("注重自己的个人形象,提升自己。");
    10. }
    11. @Override
    12. protected void step3() {
    13. System.out.println("吸引小哥哥的注意,和小哥哥聊天,约小哥哥出来玩。");
    14. }
    15. @Override
    16. protected void step4() {
    17. System.out.println("暗示和表白");
    18. }
    19. }

    测试

    1. @Test
    2. void test1() {
    3. GetFriendTemplate getGirlfriend = new GetGirlfriend();
    4. getGirlfriend.findFriend();
    5. System.out.println("-------------------");
    6. GetFriendTemplate getBoyfriend = new GetBoyfriend();
    7. getBoyfriend.findFriend();
    8. }

    结果

     

  • 相关阅读:
    1.JavaSe_环境变量
    网站服务器出现404情况
    equals提高执行速度/性能优化
    基于第二代 ChatGLM2-6B P-Tuning v2 微调训练医疗问答任务
    为什么不建议使用Python自带的logging?
    iOS - 多线程-atomic
    使用flutter的Scaffold脚手架开发一个最简单的带tabbar的app模板
    RabbitMQ
    【opencv】传统图像识别:hog+svm实现图像识别详解
    Leecode DFS深度优先搜索
  • 原文地址:https://blog.csdn.net/m0_45877477/article/details/126709759