Java 具有策略模式的单例

Java 具有策略模式的单例,java,singleton,strategy-pattern,Java,Singleton,Strategy Pattern,下面是一个策略的界面 public interface Strategy { public void doStuff(Object o); } 这里有一个可能的实现 public class StrategyImpl implements Strategy { @Override public void doStuff(Object o) { //Do things with o } } 现在,我可能有数百个使用实现策略impl的对象。

下面是一个策略的界面

public interface Strategy
{
    public void doStuff(Object o);
}
这里有一个可能的实现

public class StrategyImpl implements Strategy
{
    @Override
    public void doStuff(Object o)
    {
        //Do things with o
    }
}
现在,我可能有数百个使用实现策略impl的对象。是应该为所有这数百个对象创建StrategyImpl的新实例,还是有更好的方法?
我已经读到不应该使用单例来节省内存,但似乎真的没有必要创建数百个相同的实例。也许最好的解决方案不是单例,而是与之类似的东西


我应该如何着手制定战略?我不应该为这些类型的问题而烦恼吗?

通常新的实现应该更好。Singleton很大程度上是基于策略的实施,条件是应该有,例如没有私有属性。这对于更小、更简单的策略很有效,但我不建议依赖它。关于为什么单例总体上不好的更多信息可以找到

这就是依赖注入的作用。使用guice/Spring将
StrategyImpl
的一个实例注入到所有依赖对象中。策略接口实现似乎是不可变/无状态单例的一大用途。@spinlok提到的框架经常使用单例。我从你的链接中读到了最上面的答案,我有一些评论供稍后阅读你答案的其他人参考:1。单例不必是全局实例。单例可以由工厂拥有,并传递给新实例。2.这毫无意义。是否每个具有构造函数的类都违反了单一责任原则?3.胡说它们只是提供了一个可以共享的不可变代码实例。4.它们的状态应该是不变的。只要做一次,就可以了。@mhvelplund 1)Singleton是一种设计(反)模式,从定义来看,它是系统中的一个实例,无论是直接调用还是通过工厂调用,所以是的,它是一个全局实例。2) 构造和负责构造是有区别的——具有构造函数的对象通常不负责构造,只要构造函数不是从它们内部调用的——单例(反)模式就是这样。了解有关坚实原则的更多信息。不知道3和4指的是什么。