有这么一种情况,有很多类会有一些相似的逻辑,但又不完全一样,只有一些微小的差别,为了这些微小的差别,很多时候我们会一拍脑袋,把这些逻辑不厌其烦的写了一遍又一遍.
重复 = 易错 + 难于变化
为了解决这个问题,我们可以充分利用多态的特性,将这些微小的变化延迟到子类.
每个子类只要实现这些小变化就可以了.
抽象类,封装不变的内容:
子类,封装微小的变化
测试类
结果: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();
- }
- }
很简单吧,让我想起了前些天写的 数据表实体对象类(http://blog.csdn.net/nyzhl/archive/2008/10/14/3075612.aspx)
各个类都有相似的数据库操作,我当时的做法是把变化以受保护构造函数的形式,让子类传递给父类构造函数.
和模板方法模式相比,可能这样的做法稍显笨拙,但似乎也不是特别差O(∩_∩)O哈哈~
等等我再用模板方法模式重构一下,由于代码太长,就不贴上来啦
,