一、概念
- 一个抽象类公开定义执行它的方法的方式\模板,它的子类可以安需要重新函数实现,但调用将以抽象类中定义的方式进行,就叫模板方法设计模式,属于行为型设计模式。
二、场景
- 适用于公共函数封装在抽象类中,各自的子类则实现不同的函数。
三、实现
-
条件
- 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();
-
四、优缺点
-
优点
- 封装不变部分,扩展可变部分。
- 行为完全由父类控制,子类去实现。
-
缺点
- 每个不同的实现都得需要一个类,这样会造成项目增大 。