这是什么?模板方法还是什么?

时间:2009-03-18 23:27:57

标签: c# design-patterns oop

我有一个Request.cs类

它有一个抽象的方法:

public abstract Response CreateResponse(XmlReader reader);

并且还有一种方法:

public Response SendRequest(string requestURI)
{
    ...

    XmlReader reader = XmlReader.Create(responseStream);

    return CreateResponse(reader);
}

CreateResponse method在扩展Request的子类中实现。并且该实现返回响应。

我不明白如何返回这样一个抽象方法的方法,但返回的值实际上是从子类实现方法。这是Template Method pattern或简单多态的一个例子,还是这个“棘手或太精明”的代码甚至是凌乱的?我试图找出如何做到这一点(这是基本的OOP主体或设计模式),这是一个很好的做法还是很好地利用OOP?

4 个答案:

答案 0 :(得分:1)

这是一种非常标准的方法。事实上,它经常被推荐。 CreateResponse方法就像一个空白,必须由派生类填充。

答案 1 :(得分:1)

是的,这是模板方法。由于Response类是抽象的,因此在调用SendRequest之前,您必须实现CreateResponse。这样,公共逻辑被封装在基类中,其余逻辑可以根据需要变化(通过创建基类的多个实现)。

答案 2 :(得分:0)

主要原因是当你使用这个方法时,你永远不会知道细节,只有界面和抽象方法已经定义了。

由于方法是抽象的,因此它们没有细节,因为它们必须由派生类定义。使这成为可能的要点是“INs”和“OUTs”永远不会改变,因为基础中的方法是抽象的,因此定义了接口,而不是实现......但是。

可以把它想象成从A点到B点销售基本机票的人,不知道将使用什么样的航空公司。他们不知道你将如何到达那里,但一旦他们将售出的机票合同交给航空公司,该航空公司将会计算出符合合同条款的细节。购买机票时你所关心的只是你知道从A到B的x美元。

答案 3 :(得分:0)

这是模板方法,模板方法实际上并不比简单的多态。这正是典型的C#/ Java风格的OO多态性的用途,并且是该语言的良好用法。