Design patterns 是否有配置功能覆盖模式的模式?

Design patterns 是否有配置功能覆盖模式的模式?,design-patterns,Design Patterns,接口定义了一系列函数func1到func20。有许多派生类只实现这20个func的一部分。func的实现有自己的模式,例如:f1的实现有2种,f2的实现有3种。派生类将实现接口中定义的大约3到5个func,所有这些实现都是按定义的种类选择的。派生类中的大多数func为空意味着当外部模型通过引用接口调用它时,什么也不做。 是否有一种模式可以对对象进行固定实现并使用它们配置派生类?例如:派生类D1需要实现f2和f10,f2使用从所有3种实现中选择的第一种实现。f10使用从所有2种类型中选择的第二种实

接口定义了一系列函数func1到func20。有许多派生类只实现这20个func的一部分。func的实现有自己的模式,例如:f1的实现有2种,f2的实现有3种。派生类将实现接口中定义的大约3到5个func,所有这些实现都是按定义的种类选择的。派生类中的大多数func为空意味着当外部模型通过引用接口调用它时,什么也不做。 是否有一种模式可以对对象进行固定实现并使用它们配置派生类?例如:派生类D1需要实现f2和f10,f2使用从所有3种实现中选择的第一种实现。f10使用从所有2种类型中选择的第二种实现

我现在的解决方案很简单:只从接口派生并重写它需要的函数,但问题是:func实现的增加比派生类慢得多,因为派生类是由不同func的组合构造的。我必须将func实现代码硬拷贝到派生类中,这是不好的。这很难维持

我想让派生类可以通过原语func代码进行配置,可以吗

=====================================================================

我正在澄清我的问题,装饰师确实可以解决这个问题

interface A {
    f1();
    f2();
    ...
    f20();
}
f1-20的实现不是任意的,它们有固定的模式。f1()有3种实现,例如,{1a}、{1b}、{1c}。f2()有两种:{2a},{2b}。实现的派生类只需要重写大约3-5个小数目的函数。如您所见,可能的派生类定义(随机选择一些fn()进行覆盖,并从每个fn()中选择一种实现)是一个组合,数量巨大。其结果是固定的fn的实施将被复制到每一个地方

Decorator通过将每个fn的实现(如{1a})放入接口a的Decorator来解决这个问题。因此,如果我们想要一个派生类只通过{1a}{2b}重写f1和f2,那么将{1a}{2b}Decorator组合到一个对象。关键是定义抽象类装饰器基:

abstract class DecoratorBase : A {
    A a;
    DecoratorBase(A a){this.a=a;}
    f1(){a.f1();}
    f2(){a.f2();};
    ...
    f20(){a.f20();};
}
并将一些默认进程定义到基A中(如果没有默认的公共进程,则可以忽略此项)

f1()的第一类实现:

f2()的第二种实现:

最后,将它们结合起来:

new F1A(new F2B(BaseA()));

嗯,装饰图案看起来合适吗


可能与Factory和/或Builder模式相结合。

我只是建议使用Decorator作为连接一组函数的一种方法。如果不需要沟通,收集可能是更好的选择。部分函数的公共接口。使用Factory来配置您实际使用的2-3个配置。那么:您的问题是虚拟方法会降低您的计算速度吗?您使用的是哪种语言?
class F1A : DecoratorBase  {
    F1A(A a){super(a);}
    f1(){super.f1();/*1a*/}
}
class F2B : DecoratorBase  {
    F2B(A a){super(a);}
    f2(){super.f2();/*2b*/}
}
new F1A(new F2B(BaseA()));