为什么单身人偶合?

时间:2017-01-19 22:01:42

标签: design-patterns singleton coupling

我读过很多关于单身人士的事情,但是我不明白它是如何紧密耦合的。你能举一个小例子吗?

1 个答案:

答案 0 :(得分:2)

来自Scott Densmore,

  

单身人士将你紧紧联系到单身对象的确切类型,从而消除了使用多态来代替替代方案的机会。

链接: https://blogs.msdn.microsoft.com/scottdensmore/2004/05/25/why-singletons-are-evil/

例如,如果您有一个抽象基类:

public abstract class Connection{
   ...
   public abstract void getConnection();
}

一个实现

public class OracleConnection extends Connection{

...
    @Override
    public void getConnection(){
        InitializeOracle();
    }
}

另一个

public class PostgresConnection extends Connection{
...
    @Override
    public void getConnection(){
        InitializePostgres();
    }
}

使用单例模式,您会遇到任何原始的全局连接对象。如果要在运行时使用其中一个或两个,则会很糟糕。你不能。

根据单例的定义,上面只是在一个没有扩展的具体类中,你只有一个连接对象。不是很灵活。像这样:

final class Connection {}

public class Connection{
   ...
   public void getConnection(){
       InitializeConnection(); // you're totally stuck with this connection
   }
}