行为型模式-模板方法模式

using System;
using System.Text;
using System.Collections.Generic;


namespace 模板方法模式
{
/*
* 模板方法的意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
*
* 模板方法实现要点:1、Template Method调用的虚方法可以具有实现,也可以没有任何实现(抽象方法,纯虚方法),但一般推荐将它们设置为protected方法
*
* 模板方法优点:1、封装不变部分(算法框架),扩展可变部分
* 2、提取公共部分代码,便于维护
* 3、行为由父类控制,子类实现,使得算法相对稳定,易于扩展
*
* 模板方法缺点:1、违背了正常的设计习惯,一般抽象类都负责声明最抽象,最一般的失误属性和方法,实现由其子类实现
* 但模板方法则相反,其实现虽由子类实现,但子类的执行结果却影响了父类,这很容易带来代码阅读难度
*
* 模板方法使用场景:1、多个子类有公共的方法,且基本逻辑基本相同时。
* 2、重要,复杂且不易变的算法,可以把核心算法设为模板方法。
* 3、重构时,把相同的代码抽取到父类中,然后通过“钩子”的方式约束其行为
*/

///<summary>
/// 定义模板方法和算法框架
///</summary>
publicabstractclass AbstactClass
{
publicabstractvoid PrimitiveOperation1();

publicabstractvoid PrimitiveOperation2();

///<summary>
/// 模板方法,定义框架集
///</summary>
publicvoid TemplateMethod()
{
this.PrimitiveOperation1();
this.PrimitiveOperation2();
}
}

publicclass ConcreteClassA : AbstactClass
{
publicoverridevoid PrimitiveOperation1()
{
//A类方法1的实现
}

publicoverridevoid PrimitiveOperation2()
{
//A类方法2的实现
}
}

publicclass ConcreteClassB : AbstactClass
{
publicoverridevoid PrimitiveOperation1()
{
//具体B类方法1的实现
}

publicoverridevoid PrimitiveOperation2()
{
//具体B类方法2的实现
}
}

publicclass AppClinet
{
publicstaticvoid Main(string[] args)
{

AbstactClass abstractClass
=new ConcreteClassA();
abstractClass.TemplateMethod();
//将调用A的两个具体实现

abstractClass
=new ConcreteClassB();
abstractClass.TemplateMethod();
//将调用B的两个具体实现

}


}
}
posted @ 2011-03-22 22:37  日月之明  阅读(220)  评论(0编辑  收藏  举报