尽可能简单地分解:
以下情景是否有设计模式(名称)?
可能有许多通用的生成器可用于实现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);
}
}
编辑: 我遇到了适配器模式,桥接模式和装饰模式。它们都不适合这种设置。最接近的可能是适配器或桥接模式,但我既不适应某种东西,也不适应桥接(抽象类实现与实现者完全相同的接口)
答案 0 :(得分:1)
在Java中,由于某些Java类(如MouseAdapter
)的命名,我听说这称为适配器模式。但是,我在Adapter Pattern上找到的信息表明它通常用于表示其他内容。
这种模式在实现上类似于 Decorator Pattern ,但意图并不完全相同。
答案 1 :(得分:0)
也许这是Martin Fowler称之为企业应用程序架构模式中的注册表模式的版本。在his website
上有一篇关于它的文章答案 2 :(得分:0)
我已经看到这被称为处理程序模式,可以被认为是GOF 责任链模式的变体,但Handler可以找到在O(1)查找中使用的正确实现,而不是O(n)遍历链。
这也非常类似于重构模式' 使用命令替换条件的最终结果我认为处理程序模式