模板方法模式 - Design Patterns 学习笔记 (7)
2008-10-22 13:31
253 查看
有这么一种情况,有很多类会有一些相似的逻辑,但又不完全一样,只有一些微小的差别,为了这些微小的差别,很多时候我们会一拍脑袋,把这些逻辑不厌其烦的写了一遍又一遍.
重复 = 易错 + 难于变化
为了解决这个问题,我们可以充分利用多态的特性,将这些微小的变化延迟到子类.
每个子类只要实现这些小变化就可以了.
抽象类,封装不变的内容:
public abstract class Person
{
public abstract string Name
{
get;
}
public void Introduce()
{
Console.WriteLine("My name is "+Name);
}
}
子类,封装微小的变化
public class Nyzhl:Person
{
public override string Name
{
get
{
return "nyzhl";
}
}
}
测试类
public class Test
{
static void Main()
{
Person nyzhl = new Nyzhl();
nyzhl.Introduce();
}
}
结果:My name is nyzhl
很简单吧,让我想起了前些天写的 数据表实体对象类(http://blog.csdn.net/nyzhl/archive/2008/10/14/3075612.aspx)
各个类都有相似的数据库操作,我当时的做法是把变化以受保护构造函数的形式,让子类传递给父类构造函数.
和模板方法模式相比,可能这样的做法稍显笨拙,但似乎也不是特别差O(∩_∩)O哈哈~
等等我再用模板方法模式重构一下,由于代码太长,就不贴上来啦
,
重复 = 易错 + 难于变化
为了解决这个问题,我们可以充分利用多态的特性,将这些微小的变化延迟到子类.
每个子类只要实现这些小变化就可以了.
抽象类,封装不变的内容:
public abstract class Person
{
public abstract string Name
{
get;
}
public void Introduce()
{
Console.WriteLine("My name is "+Name);
}
}
子类,封装微小的变化
public class Nyzhl:Person
{
public override string Name
{
get
{
return "nyzhl";
}
}
}
测试类
public class Test
{
static void Main()
{
Person nyzhl = new Nyzhl();
nyzhl.Introduce();
}
}
结果:My name is nyzhl
很简单吧,让我想起了前些天写的 数据表实体对象类(http://blog.csdn.net/nyzhl/archive/2008/10/14/3075612.aspx)
各个类都有相似的数据库操作,我当时的做法是把变化以受保护构造函数的形式,让子类传递给父类构造函数.
和模板方法模式相比,可能这样的做法稍显笨拙,但似乎也不是特别差O(∩_∩)O哈哈~
等等我再用模板方法模式重构一下,由于代码太长,就不贴上来啦
,
相关文章推荐
- 设计模式学习笔记(二十四)——Template Method模板方法
- 设计模式学习笔记之模板方法模式
- 【HeadFirst 设计模式学习笔记】8 模板方法模式
- 设计模式学习笔记——模板方法模式
- 设计模式学习笔记-模板方法模式
- 设计模式学习笔记——模板方法模式
- Design Pattern学习笔记 --- 模板方法(Template Method)模式
- 设计模式学习笔记之模板方法模式
- 【设计模式】学习笔记11:模板方法(Template Method)
- 《 Head first设计模式 》学习笔记 – 模板方法模式
- 设计模式学习笔记(十六)——Template Method模板方法模式
- 设计模式学习笔记(十八:模板方法模式)
- 设计模式学习笔记--模板方法(Template Method)模式
- 金庸小说考试之模板方法模式学习笔记[C++版]
- HeadFirst 设计模式学习笔记8--模板方法模式
- Head First设计模式学习笔记-------(9)模板方法模式
- 设计模式C++学习笔记之九(Template Method模板方法模式)
- HeadFirst 设计模式学习笔记8--模板方法模式
- 设计模式学习笔记十三:模板方法模式
- 设计模式学习笔记(十六)——Template Method模板方法模式