求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
要资料
 
 
 

设计模式教程
简单工厂模式
AbstractFactory模式
FactoryMethod模式
Prototype模式
Singleton模式
Template Method模式
Builder模式
Class-Adapter 模式
Facade 模式
Object-Adapter 模式
Bridge模式
 
 

Template Method模式
1331 次浏览
42次  
来源:火龙果软件   作者:俎涛
 
问题 多个算法具有类似的过程,过程中的每步因每个算法而不同,希望能够复用类似的过程
环境 每个算法的过程具有稳定性,多个算法的过程具有一致性
解决方案 1. 把多个算法的类似步骤进行抽象,这样可以提炼出算法的公共过程骨架。
例如 TxtLoger和XmlLoger抽象为Loger
2. 把算法的每个步骤留给子类实现。
例如:TxtLoger和XmlLoger分别实现Connect(),Log(),Close()
效果 实现了算法算法过程复用,算法每个步骤实现的灵活性。
实例 TxtLoger和XmlLoger具有类似的过程,不同的步骤实现。

结构类图

模式范例

下面对模式给出范例,包括:

  • 需求,采用用例模型描述
  • 设计,包括:设计类图,顺序图。
  • 实现:代码目录。
  • 运行:运行效果界面

用例模型

用例名称 记录日志
用例概述 打开目标文件,记录日志
基本场景 1.连接文件
2.写入日志
3. 关闭文件

设计类图

顺序图:

代码目录

abstract class Logger

{

     public void Log(string message)

    {

 

        Connect();

        Write(message);

        Close();

    }

 

    public abstract void Connect();

    public abstract void Write(string message);

    public abstract void Close();

}

 

class TxtLogger : Logger

{

    public override void Connect()

    {

        Console.WriteLine("Txt File is Connected");

 

 

    }

 

    public override void Write(string message)

    {

        Console.WriteLine (DateTime.Now.ToString()+":"+message);

 

    }

 

    public override void Close()

    {

        Console.WriteLine("Txt log file is Closed");

 

    }

}

 

class XmlLogger : Logger

{

    public override void Connect()

    {

        Console.WriteLine("Xml log file  is Connected");

 

 

    }

 

    public override void Write(string message)

    {

        Console.WriteLine (DateTime.Now.ToString() + ":" + message);

 

    }

 

    public override void Close()

    {

        Console.WriteLine("Xml log file is Closed");

 

    }

}

class MainApp

{

    static void Main()

    {

        Logger logger = null;

        logger = new TxtLogger();

        logger.Log("it is normal");

 

        Console.WriteLine ("-------------------------------------------");

 

        logger = new XmlLogger();

        logger.Log("it is normal");

 

    }

 

}

运行效果


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



1331 次浏览
42次
 捐助