Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 为什么单例产生耦合?_Design Patterns_Singleton_Coupling - Fatal编程技术网

Design patterns 为什么单例产生耦合?

Design patterns 为什么单例产生耦合?,design-patterns,singleton,coupling,Design Patterns,Singleton,Coupling,我读了很多关于单身是紧密结合的,但我不明白它是如何紧密结合的。你能举个小例子吗?来自Scott Densmore singleton将您紧密地耦合到singleton对象的确切类型,从而消除了使用多态性替代另一种方法的机会 链接: 例如,如果您有一个抽象基类: public abstract class Connection{ ... public abstract void getConnection(); } 和一个实现 public class OracleConnecti

我读了很多关于单身是紧密结合的,但我不明白它是如何紧密结合的。你能举个小例子吗?

来自Scott Densmore

singleton将您紧密地耦合到singleton对象的确切类型,从而消除了使用多态性替代另一种方法的机会

链接:

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

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();
    }
}
使用单例模式时,您只能使用您拥有的任何原始全局连接对象。如果您想在运行时使用其中一个或另一个,或同时使用这两个,则会很糟糕。你不能

根据singleton的定义,上面的内容只存在于一个没有扩展的具体类中,并且您只有一个连接对象。不是很灵活。像这样:

final class Connection {}

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