首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不带继承的模板方法模式

不带继承的模板方法模式
EN

Stack Overflow用户
提问于 2013-07-17 14:53:13
回答 2查看 1.7K关注 0票数 6

如何实现模板方法模式的变体,从而使具体类不从基类继承,但保持模式的整体功能。它不能继承的原因是它被强制从另一个类继承,并且多重继承不可用。

例如,假设下面的Tempate方法模式:

代码语言:javascript
复制
public abstract class BaseClass {
    public void Alpha() {
        Beta();
    }

    public abstract void Beta();

    public void Gamma() {
        Delta();
    }

    public abstract void Delta();

}

public ConcreteClass : BaseClass {
    public override void Beta() {
        Gamma();
    }

    public override void Delta() {
        Console.WriteLine("Delta");
    }
}

...
var object = new ConcreteClass();
object.Alpha(); // will outout "Delta"

在不继承BaseClass的情况下,ConcreteClass如何实现同样的效果?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-17 15:56:11

您的基类可以依赖于通过构造函数注入的接口(或其他类型)。然后,您的模板方法可以使用此接口/类型上的方法来实现模式所需的结果:

代码语言:javascript
复制
public class BaseClass 
{
    IDependent _dependent;

    public BaseClass(IDependent dependent)
    {
         _dependent = dependent;
    }

    public void Alpha() {
        _depdendent.Beta();
    }

    public void Gamma() {
        _depdendent.Delta();
    }

}

有效地使用组合而不是继承。

票数 4
EN

Stack Overflow用户

发布于 2017-12-25 18:53:32

您可以通过在方法调用时提供对基类的引用来实现此目的:

代码语言:javascript
复制
public ConcreteClass {
    public void Beta(BaseClass baseClass) {
        baseClass.Gamma();
    }

    public void Delta() {
        Console.WriteLine("Delta");
        }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17693087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档