设计模式之模板方法设计模式

本文详细介绍了模板方法设计模式的概念、应用场景及其实现方式,以日志文件上传到不同云服务器为例,展示了该模式如何封装不变部分并允许子类扩展。通过使用Java代码示例,解释了如何创建抽象云服务类及其阿里云和华为云的实现。模板方法模式的优点在于封装和扩展,但可能增加类的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概念

  • 一个抽象类公开定义执行它的方法的方式\模板,它的子类可以安需要重新函数实现,但调用将以抽象类中定义的方式进行,就叫模板方法设计模式,属于行为型设计模式。

二、场景

  • 适用于公共函数封装在抽象类中,各自的子类则实现不同的函数。

三、实现

  • 条件

    • java
  • 场景

    • 以日志文件上传到不同的云服务器为场景。
  • 代码实现

    • 新建日志领域模型,类名:LogFile

      package com.TemplatePattern;
       
      public class LogFile {
          private String Name;
          public String getName() {
              return Name;
          }
      
          public void setName(String name) {
              Name = name;
          }
      }
      
      
    • 新建云服务抽象类,类名:AbstractCloudServer

      package com.TemplatePattern; 
      
      public abstract class AbstractCloudServer {
          public LogFile logFile;
          public abstract void saveFile();
      }
      
      
    • 新建阿里云实现类,类名:AliCloudServer 继承 AbstractCloudServer

      package com.TemplatePattern;
      public class AliCloudServer extends AbstractCloudServer {
          @Override
          public  void saveFile() {
              System.out.println("AliCloudServer:"+logFile.getName()+"文件保存成功!");
          }
      }
      
      
    • 新建华为云实现类,类名:HuWeiCloudServer 继承 AbstractCloudServer

      package com.TemplatePattern;
      
      public class HuWeiCloudServer extends AbstractCloudServer {
          @Override
          public void saveFile() {
              System.out.println("HuWeiCloudServer:"+logFile.getName()+"文件保存成功!");
          }
      } 
      
    • 新建云服务工厂类,类名:CloudFactory

      package com.TemplatePattern;
      
      
      public class CloudFactory {
      
          public  static  AbstractCloudServer getObject (String typ)
          {
              switch (typ)
              {
                  case "ALi":
                      return new AliCloudServer();
                  case "HuWei":
                      return new HuWeiCloudServer();
                  default:
                      return null;
              }
          }
      } 
      
    • 入口函数类,类名:

       LogFile logFile = new  LogFile();
       logFile.setName("日志文件");
       AbstractCloudServer abstractCloudServer = CloudFactory.getObject("ALi");
       abstractCloudServer.logFile = logFile;
       abstractCloudServer.saveFile();
      

四、优缺点

  • 优点

    • 封装不变部分,扩展可变部分。
    • 行为完全由父类控制,子类去实现。
  • 缺点

    • 每个不同的实现都得需要一个类,这样会造成项目增大 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值