抽象类实现接口和聚合同一接口的多个实现。它有一个模式(名称)吗?

时间:2014-03-18 17:15:04

标签: java oop design-patterns

尽可能简单地分解:

以下情景是否有设计模式(名称)?

可能有许多通用的生成器可用于实现IGenerator接口,但也有一些依赖于国家的接口(扩展GeneratorBase)。后者可以封装依赖于国家的发电机以及与国家无关的发电机,具体取决于" SomeType"举行实施。 Mehtod init()旨在覆盖包含可用生成器的注册/映射过程。

抽象类GeneratorBase提供了关联和查找特定类型的" SomyType"的生成器的功能。同时可以存在IGenerator实现,它们既不知道" SomeType"或者是一个国家。

旁注: 所有可用(不可用!)生成器都保存在一个单独的注册表类中,该类负责查找正确的IGenerator实现。

客户端/用户获得的唯一接口是IGenerator接口。

public interface IGenerator
{
    public String generate(SomeType s);
}

public abstract class GeneratorBase implements IGenerator
{
    private Map generators;
    protected String country;

    public GeneratorBase(String country){
        generators = new HashMap();
        this.country = country;
        init();
    }

    public abstract void init();

    public String generate(SomeType s)
    {
        Generator gen = (Generator) generators.get(new Integer(s.getObjectType()));
        ...
        return gen.generate(s);
    }
}

编辑: 我遇到了适配器模式,桥接模式和装饰模式。它们都不适合这种设置。最接近的可能是适配器或桥接模式,但我既不适应某种东西,也不适应桥接(抽象类实现与实现者完全相同的接口)

3 个答案:

答案 0 :(得分:1)

在Java中,由于某些Java类(如MouseAdapter)的命名,我听说这称为适配器模式。但是,我在Adapter Pattern上找到的信息表明它通常用于表示其他内容。

这种模式在实现上类似于 Decorator Pattern ,但意图并不完全相同。

答案 1 :(得分:0)

也许这是Martin Fowler称之为企业应用程序架构模式中的注册表模式的版本。在his website

上有一篇关于它的文章

答案 2 :(得分:0)

我已经看到这被称为处理程序模式,可以被认为是GOF 责任链模式的变体,但Handler可以找到在O(1)查找中使用的正确实现,而不是O(n)遍历链。

这也非常类似于重构模式' 使用命令替换条件的最终结果我认为处理程序模式

另见: "Handler" pattern?