所有这些不同对象的渲染是否相同?如果是这样,那么它应该只实现一次,最有可能在基类中实现。这将是一个比Singleton更好的解决方案,后者的目的完全不同:主要是实现一个应该只存在一次的资源(注意它是一个资源,而不是一个方法)。
如果 render() 的每个实现都不同(很可能是这种情况),那么在单独的对象中实现它们就没有错,这称为多态。不过,可能应该做的是有一个类层次结构,其中 render() 方法在基类中定义(很可能是抽象的)并在派生类中实现。这有效地形式化了接口,这意味着从所述基类继承的任何类都将具有可用的 render() 方法并且必须实现它。
如果您有部分渲染代码是公用的,以及特定于派生类的部分,则不必在所有派生类实现中复制公用部分,您可以使用模板方法模式,即基类方法执行公共部分,并协调调用派生类实现。这是 C++ 中的伪代码示例
class TagBase {
public:
void render() {
// do some common stuff here
doRender();
// do some more common stuff here
}
virtual void doRender() = 0;
....
};
class TagA : public TagBase {
public:
virtual void doRender() {
// do your specific stuff here
}
};
这里有几本好书: