1 概念
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
2 应用场景
- 有多个子类共有的方法,且逻辑相同。
- 重要的、复杂的方法,可以考虑作为模板方法。
3 实际使用案例
3.1 场景分析
一个国际上市公司的老板Tom经常去不同的国家谈合作,邮件中需要进行自我介绍,在不同的国家需要不同的语言,但是介绍的模板都是相同的,主需要更换不同语言的名字就可以实现自我介绍的模板,因此我们设计一个签名的抽闲,几个不同的语言进行具体的实现,实例化时只需要声明代表不同语言的实现类,设置好不同语言的签名就可以简单的进行自我介绍。
3.2 类图
网络异常,图片无法展示
|
3.3 代码实现
Signature抽象类
/** * @desc: 签名抽象类 * @author: YanMingXin * @create: 2021/8/28-22:08 **/ public abstract class Signature { public String name; /** * 打开笔 */ public abstract void open(); /** * 关闭笔 */ public abstract void close(); /** * 签名的内容 */ public abstract void print(); /** * 进行显示 */ public void display() { open(); print(); close(); } } 复制代码
ChineseSignature类
/** * @desc: 中文签名 * @author: YanMingXin * @create: 2021/8/28-22:08 **/ public class ChineseSignature extends Signature{ public ChineseSignature(String name){ this.name=name; } @Override public void open() { System.out.print("我的中文名字是 : "); } @Override public void close() { System.out.print("。"); } @Override public void print() { System.out.print(name); } } 复制代码
EnglishSignature类
/** * @desc: 英文签名 * @author: YanMingXin * @create: 2021/8/28-22:08 **/ public class EnglishSignature extends Signature{ public EnglishSignature(String name) { this.name=name; } @Override public void open() { System.out.print("My English is : "); } @Override public void close() { System.out.print("."); } @Override public void print() { System.out.print(name); } } 复制代码
RussianSignature类
/** * @desc: 俄文签名 * @author: YanMingXin * @create: 2021/8/28-22:09 **/ public class RussianSignature extends Signature{ public RussianSignature(String name){ this.name=name; } @Override public void open() { System.out.print("Моё русское имя : "); } @Override public void close() { System.out.print("."); } @Override public void print() { System.out.print(name); } } 复制代码
测试类:
/** * @desc: 模板方法模式测试 * @author: YanMingXin * @create: 2021/8/28-22:06 **/ public class MyTemplate { public static void main(String[] args) { Signature signature = new ChineseSignature("汤姆"); signature.display(); System.out.println(); signature = new EnglishSignature("Tom"); signature.display(); System.out.println(); signature = new RussianSignature("Том"); signature.display(); } } 复制代码
测试结果:
网络异常,图片无法展示
|