设计模式 - 模板方法模式

简介: 设计模式 - 模板方法模式

模板方法的定义:

模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。

优点

  1. 它封装了不变部分,扩展可变部分。它把认为是不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展。
  2. 它在父类中提取了公共的部分代码,便于代码复用。
  3. 部分方法是由子类实现的,因此子类可以通过扩展方式增加相应的功能,符合开闭原则。

结构

1)抽象类/抽象模板(Abstract Class)

抽象模板类,负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。这些方法的定义如下。

① 模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法。

② 基本方法:是整个算法中的一个步骤,包含以下几种类型。

● 抽象方法:在抽象类中声明,由具体子类实现。

● 具体方法:在抽象类中已经实现,在具体子类中可以继承或重写它。

● 钩子方法:在抽象类中已经实现,包括用于判断的逻辑方法和需要子类重写的空方法两种。

代码

public static void Main(String[] args)
            {
                StudyAbroad tm = new StudyInAmerica();
                tm.TemplateMethod();
            }
        //抽象类: 出国留学
        abstract class StudyAbroad
        {
            public void TemplateMethod() //模板方法
            {
                LookingForSchool(); //索取学校资料
                ApplyForEnrol();    //入学申请
                ApplyForPassport(); //办理因私出国护照、出境卡和公证
                ApplyForVisa();     //申请签证
                ReadyGoAbroad();    //体检、订机票、准备行装
                Arriving();         //抵达
            }
            public void ApplyForPassport()
            {
               Console.WriteLine("三.办理因私出国护照、出境卡和公证:");
                Console.WriteLine("  1)持录取通知书、本人户口簿或身份证向户口所在地公安机关申请办理因私出国护照和出境卡。");
                Console.WriteLine("  2)办理出生公证书,学历、学位和成绩公证,经历证书,亲属关系公证,经济担保公证。");
            }
            public void ApplyForVisa()
            {
                Console.WriteLine("四.申请签证:");
                Console.WriteLine("  1)准备申请国外境签证所需的各种资料,包括个人学历、成绩单、工作经历的证明;个人及家庭收入、资金和财产证明;家庭成员的关系证明等;");
                Console.WriteLine("  2)向拟留学国家驻华使(领)馆申请入境签证。申请时需按要求填写有关表格,递交必需的证明材料,缴纳签证。有的国家(比如美国、英国、加拿大等)在申请签证时会要求申请人前往使(领)馆进行面试。");
            }
            public void ReadyGoAbroad()
            {
                Console.WriteLine("五.体检、订机票、准备行装:");
               Console.WriteLine("  1)进行身体检查、免疫检查和接种传染病疫苗;");
                Console.WriteLine("  2)确定机票时间、航班和转机地点。");
            }
            public abstract void LookingForSchool();//索取学校资料
            public abstract void ApplyForEnrol();   //入学申请
            public abstract void Arriving();        //抵达
        }
        //具体子类: 美国留学
        class StudyInAmerica : StudyAbroad
        {
    public  override void LookingForSchool()
        {
            Console.WriteLine("一.索取学校以下资料:");
            Console.WriteLine("  1)对留学意向国家的政治、经济、文化背景和教育体制、学术水平进行较为全面的了解;");
            Console.WriteLine("  2)全面了解和掌握国外学校的情况,包括历史、学费、学制、专业、师资配备、教学设施、学术地位、学生人数等;");
            Console.WriteLine("  3)了解该学校的住宿、交通、医疗保险情况如何;");
          Console.WriteLine("  4)该学校在中国是否有授权代理招生的留学中介公司?");
        }
    public override void ApplyForEnrol()
        {
            Console.WriteLine("二.入学申请:");
           Console.WriteLine("  1)填写报名表;");
           Console.WriteLine("  2)将报名表、个人学历证明、最近的学习成绩单、推荐信、个人简历、托福或雅思语言考试成绩单等资料寄往所申请的学校;");
            Console.WriteLine("  3)为了给签证办理留有充裕的时间,建议越早申请越好,一般提前1年就比较从容。");
        }
    public override void Arriving()
        {
          Console.WriteLine("六.抵达目标学校:");
           Console.WriteLine("  1)安排住宿;");
            Console.WriteLine("  2)了解校园及周边环境。");
        }
    }


相关文章
|
8月前
|
设计模式 算法
二十三种设计模式全面解析-深入解析模板方法模式的奇妙世界
二十三种设计模式全面解析-深入解析模板方法模式的奇妙世界
|
设计模式 存储 算法
行为型设计模式02-模板方法模式
行为型设计模式02-模板方法模式
60 0
|
设计模式 算法
设计模式9 - 模板方法模式【Template Method Pattern】
设计模式9 - 模板方法模式【Template Method Pattern】
45 0
|
设计模式 算法 Java
设计模式~模板方法模式(Template method)-10
目录 (1)优点: (2)缺点: (3)使用场景: (4)注意事项: (5)应用实例: (6)Servlet Api &
65 0
|
4月前
|
设计模式 算法 Java
Java设计模式-模板方法模式(14)
Java设计模式-模板方法模式(14)
|
6月前
|
设计模式 JavaScript 算法
js设计模式【详解】—— 模板方法模式
js设计模式【详解】—— 模板方法模式
53 6
|
7月前
|
设计模式 算法 关系型数据库
设计模式第七讲-外观模式、适配器模式、模板方法模式详解
系统要求所有的数据库帮助类必须实现ISqlHelp接口,面向该接口编程,如SQLServerHelp类。 此时第三方提供了一个新的MySql的帮助类(假设是dll,不能修改),它的编程规范和ISqlHelp不兼容,这个时候就需要引入适配器类,使二者能相互兼容。
187 0
|
8月前
|
设计模式 算法 Java
Java 设计模式:深入模板方法模式的原理与应用
【4月更文挑战第27天】模板方法模式是一种行为设计模式,主要用于定义一个操作中的算法的框架,允许子类在不改变算法结构的情况下重定义算法的某些特定步骤。
78 1
|
8月前
|
设计模式 Go
[设计模式 Go实现] 行为型~模板方法模式
[设计模式 Go实现] 行为型~模板方法模式
|
8月前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式

热门文章

最新文章

  • 1
    设计模式转型:从传统同步到Python协程异步编程的实践与思考
    64
  • 2
    C++一分钟之-设计模式:工厂模式与抽象工厂
    54
  • 3
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    61
  • 4
    C++一分钟之-C++中的设计模式:单例模式
    79
  • 5
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    47
  • 6
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    81
  • 7
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    70
  • 8
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    54
  • 9
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    63
  • 10
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    137