您的位置:首页 > 其它

学习生活要远离它:模板方法模式

2009-03-25 19:22 288 查看
Template Method模式是比较简单的设计模式之一,但它却是代码复用的一项基本的技术.最近频上各大论坛头条的某高校某女生抨击教育事件,让很多人对我国的大中学生的教育普通存在的问题产生共鸣,这些个问题可以很好的阐释这个模式的应用。好了,code is cheap。让代码说话。

类图:

Code

using System;

using System.Data;

using System.Data.SqlClient;

using System.Collections.Generic;

namespace TemplatePattern

{

public abstract class Student

{

public string studentType;

public virtual void Study()

{

Console.WriteLine(string.Format("{0} is studying,especially ENGLISH.", studentType));

}

public virtual void Eat()

{

Console.WriteLine("Dinner time.");

}

public abstract void Sleep();

/*模板方法 在基类里定义,而且不能够被派生类更改。有时候它是私有方法(private method),但实际上它经常被声明为protected。

* 它通过调用其它的基类方法(覆写过的)来工作,但它经常是作为初始化过程的一部分被调用的,这样就没必要让客户端程序员能够直接调用它了。

*/

/// <summary>

/// 模板方法,学生学习,吃饭,休息 (Template Method模式的一个特征就是剥离共同点)

/// </summary>

public void BeginStudentLife()

{

Study();

Eat();

Sleep();

}

}

public class HighSchoolStudent : Student

{

public HighSchoolStudent(string studentType)

{

base.studentType = studentType;

}

public override void Study()

{

base.Study();

Console.WriteLine(base.studentType + " are studying for colledge.");

}

public override void Sleep()

{

Console.WriteLine(base.studentType + " want to play game,but they have to go to bed.");

}

}

public class UniversityStudent : Student

{

public UniversityStudent(string studentType)

{

base.studentType = studentType;

}

public override void Study()

{

base.Study();

Console.WriteLine(base.studentType + " are studying for job.");

}

public override void Sleep()

{

Console.WriteLine(base.studentType + " want to play game,and they are playing the game day and night.");

}

}

public class Program

{

static void Main(string[] args)

{

Student student;

student = new HighSchoolStudent("High school student ");

student.BeginStudentLife();

student = new UniversityStudent("University student ");

student.BeginStudentLife();

Console.Read();

}

}

}
总结:

1.模板方法用最简洁的机制(虚函数的多态性)为很多应用程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。

2.除了可以灵活应对子步骤的变化外,“不用调用我,让我来调用你”的反向控制结构是模板方法的典型应用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: