`

TemplateMethodPattern

阅读更多

TemplateMethodPattern:定义一个操作中算法的骨架,而将一些步骤延伸到子类中去,使得子类可以不改变
一个算法的结构,既可重新定义算法的某些特定步骤,这里需要复用的是算法的结构,也就是步骤,而步骤的实现可以再子类中完成.

 

使用场合:
1).一次性实现一个算法的不变部分,并且将可变的行为留给子类来完成.

 

2).各子类公共的行为应该被抽取出来并集中到一个公共类中以避免代码
的重复.首先识别现有代码的不同之处,并且把不同部分分离为新的操作,
最后,用一个调用这些新的操作的模版方法来替换这些不同的代码.

 

3).控制子类的扩展.

 

组成:
父类角色:提供模版.


子类角色:为模版提供实现.

 

ClassDiagram:

 

SequenceDiagram:

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;

namespace ConsoleApplication1
{

    class Client
    {
        public static void Main(String[] agrs)
        {
            ConcreteDataObject DataObject = new ConcreteDataObject();
            DataObject.Run();
            Console.ReadKey();
        }
    }

    abstract class DataObject
    {
        //子类会根据在父类中定义的抽象方法去实现相应步骤的具体实现.
        public abstract void Connect();
        public abstract void Select();
        public abstract void Process();
        public abstract void DisConnect();

        /// <summary>
        /// 父类中的Run()方法定义好了步骤的执行的顺序.
        /// </summary>
        public void Run()
        {
            this.Connect();
            this.Select();
            this.Process();
            this.DisConnect();
        }
    }

    class ConcreteDataObject : DataObject
    {
        private string connString = ConfigurationManager.AppSettings["sql2005"].ToString();
        private SqlConnection conn;
        private SqlDataAdapter adapter;
        private DataSet ds;
        private string sqlcommandString;

        public override void Connect()
        {
            conn = new SqlConnection(connString);
        }

        public override void Select()
        {
            ds = new DataSet();
            sqlcommandString = "select * from student";
            adapter = new SqlDataAdapter(sqlcommandString, conn);
            adapter.Fill(ds, "student");
        }

        public override void Process()
        {
            DataTable dt = ds.Tables["student"];
            foreach (DataRow dr in dt.Rows)
            {
                Console.WriteLine(dr["name"]);
            }
        }

        public override void DisConnect()
        {
            ds.Dispose();
            adapter.Dispose();
            conn.Close();
        }
    }
}

 

 TemplateMethodPattern总结:父类定义好了一个操作过程执行的步骤,它具体的每一步
是如何实现的是由子类来完成,父类只关注它们的执行顺序,子类只需要把父类每个步骤
实现即可.

  • 大小: 45.2 KB
  • 大小: 44.1 KB
分享到:
评论

相关推荐

    Java 8中Lambda表达式默认方法的模板.docx

    最后,我们更新`TemplateMethodPattern`类以使用`WorkflowManager`接口: ```java public class TemplateMethodPattern { public static void main(String[] args) { initiateWorkFlow(() -&gt; new ...

    [行为型模式] 模板方法模式的理解

    在给定的压缩包中,我们有两个文件:TemplateMethodPattern.cpp 和 TemplateMethodPattern.h,它们分别代表了C++实现模板方法模式的源代码和头文件。通常,头文件(.h)包含类的声明,而源代码文件(.cpp)包含类的...

    Java设计模式学习教程与案例源码.zip

    2. [模板方法](worthed/OriginBlog/blob/master/articles/TemplateMethodPattern.md) 3. [状态模式](worthed/OriginBlog/blob/master/articles/StatePattern.md) 4. [观察者模式](worthed/OriginBlog/blob/master/...

    开发设计模式

    9. 模板方法模式【TemplateMethodPattern】:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。 10. 建造者模式...

    DesignPattern.zip

    `TemplateMethodPattern`目录可能包含抽象类和具体子类的实现。 以上是设计模式的基本概念和在C++中的实现方式。通过学习和使用这些模式,开发者可以编写出更加灵活、可维护和易于扩展的代码。在这个压缩包中,你...

    《Head First 设计模式》附书源码(Java版)

    `TemplateMethodPattern`包可能包含一个模板类和几个子类,它们分别实现模板方法中定义的一些步骤。 10. **适配器模式(Adapter)**:将一个类的接口转换成客户希望的另一个接口。`AdapterPattern`包可能包含目标...

    Java设计100例代码

    "TemplateMethodPattern"可能包含一个基本操作和可由子类定制的步骤。 13. 策略模式:定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。"StrategyPattern"可能包含根据不同策略选择不同行为的代码...

    JAVA设计模式-设计模式公司出品

    7. 模板方法模式(TEMPLATEMETHODPATTERN):模板方法模式在一个方法中定义了一个算法的骨架,将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 8. 建造者模式...

    C#设计模式

    - 模板方法模式(TemplateMethodPattern),在一个方法中定义一个算法的骨架,将一些步骤推迟到子类中。 - 命令模式(CommandPattern),将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化。 - 迭代器...

    java24种设计模式.pdf

    - 模板方法模式(TemplateMethodPattern):在一个方法中定义一个算法的骨架,将一些步骤延迟到子类中。 - 建造者模式(BuilderPattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的...

    设计模式介绍与6大设计原则.pdf

    11. 模板方法模式【TEMPLATEMETHODPATTERN】:定义一个操作中的算法的骨架,将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 12. 命令模式【COMMANDPATTERN】:...

    Java设计模式经典搞笑珍藏

    9. **模板方法模式(TemplateMethodPattern)**:在一个方法中定义一个算法的骨架,将某些步骤延迟到子类中。 10. **建造者模式(BuilderPattern)**:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以...

    深入浅出设计模式(中文版电子版)

    5.10TemplateMethodPattern(模板方法模式) 272 5.10.1定义 272 5.10.2现实例子——厨师烹调 274 5.10.3C#实例——数据库连接模板 274 5.10.4Java实例——冒泡排序模板 277 5.10.5优势和缺陷 280 5.10.6应用...

    design-patterns:用Java实现的设计模式

    `TemplateMethodPattern`可能包含了定义模板方法的父类和实现具体步骤的子类。 10. **状态模式**(State):允许对象在其内部状态改变时改变其行为,对象看起来似乎修改了它的类。`StatePattern`目录可能包含展示了...

    HeadFirstDesignPatterns:Head First设计模式书中的示例项目

    `TemplateMethodPattern`可能包含一个模板方法和几个抽象方法。 这个项目通过对各种设计模式的实际应用,帮助读者更好地理解和运用这些模式,提升代码的可维护性和可扩展性。通过阅读和分析这些示例,你可以深入...

    java-design-patterns:java模式的例子

    `TemplateMethodPattern`模块展示了如何使用抽象类定义模板方法。 十三、状态模式 状态模式允许对象在其内部状态改变时改变它的行为。`StatePattern`模块包含了如何实现状态转换的代码。 十四、职责链模式 职责链...

    DesignPatterns:演示各种设计模式的示例代码

    `TemplateMethodPattern`可能展示了如何定义基本操作流程,而具体的步骤由子类实现。 11. **状态模式**:允许对象在其内部状态改变时改变其行为。`StatePattern`目录可能会包含状态类和上下文类,展示了状态的切换...

Global site tag (gtag.js) - Google Analytics