我们可以在java中应用基于策略的设计吗?

我们可以在java中应用基于策略的设计吗?,java,c++,templates,generics,Java,C++,Templates,Generics,我刚刚读过Alexandrescu基于策略的设计,有一个问题是我们是否可以在Java中应用这种方法。让我举一个例子(从现代C++设计): 模板 结构OpNewCreator{ 静态T*Create() { 返回新的T; } }; 样板 WidgetManager类:公共创建策略 { ... }; typedef-WidgetManager-MyWidgetMgr; 因此,据我所知,模板是在编译时实例化的。类似地,在Java中,类型擦除在编译期间应用。在我们的产品中,如果我们需要实现Strat

我刚刚读过Alexandrescu基于策略的设计,有一个问题是我们是否可以在Java中应用这种方法。让我举一个例子(从现代C++设计):

模板
结构OpNewCreator{
静态T*Create()
{
返回新的T;
}
};
样板
WidgetManager类:公共创建策略
{
...
}; 
typedef-WidgetManager-MyWidgetMgr;
因此,据我所知,模板是在编译时实例化的。类似地,在Java中,类型擦除在编译期间应用。在我们的产品中,如果我们需要实现
StrategyPattern
,我们会使用标准的类似GoF的实现,老实说,我在Java中从未见过这样的例子。它可能/有用吗

UPD:当然,在Java中,我们不能以这种方式实例化类型变量,但在这种情况下我们可以使用反射


@Turtle谢谢,但我们应该看看比“是”或“否”更详尽的答案:)什么是“基于策略的设计”?它解决了什么问题?在问题中包括相关的外部链接是好的。(我认为这可能更多地与静态方法和(缺乏)多态性有关,而不是泛型。)你能澄清一下,你是在这里谈论策略模式还是仅仅提到它?我现在正在用Java编写策略模式,但除了明显的语言差异之外,它看起来不是这样。@user2864740我已经包含了外部链接。好的,按照链接中的示例,它将是(对于1:1示例):
HelloWorld hello\u world=new HelloWorld(new OutputPolicyWriteToCout(),new LanguagePolicyEnglish())
。主要的区别在于多态发生在哪里(在C++中它是编译时的结构多态性,在java中它是子类型多态性,希望有接口)。然而,这个问题并不是示例中所示的问题,并且还有其他复杂问题,主要是引入静态和创建新类型。
template <class T>
struct OpNewCreator{

    static T* Create()
    {
        return new T;
    }
};


template <class CreationPolicy>
class WidgetManager : public CreationPolicy
{
    ...
}; 

typedef WidgetManager<OpNewCreator> MyWidgetMgr;