【问题标题】:Should I use one singleton for different purposes?我应该将一个单例用于不同的目的吗?
【发布时间】:2015-03-06 14:01:44
【问题描述】:

好的,堆栈溢出。
我必须将单例用于数据库和互联网处理。对这些使用一个单例(并且在我的单例类中弄得一团糟)或两个不同的单例(并复制一些单例代码)是一种好习惯。
提前致谢。

【问题讨论】:

  • 我很好奇重复代码数据库和互联网有什么共同点。
  • 基于意见,但一般参见Separation of Concerns

标签: java design-patterns optimization singleton refactoring


【解决方案1】:

将同一个类用于两个不同的目的从来都不是一个好方法。 每个班级都应该有独特的职责 (Single Responsibility Principle)

如果您需要在类之间复制一些代码,请考虑重构并为两个类创建一个超类(如果类可以是兄弟),或者使用某种帮助类来执行常见操作。

【讨论】:

    【解决方案2】:

    是的,你可以创建一个枚举说

        public ProcessManager{
         DB_PROCESS {    
                      public void process(){
                                    ... specific code for db
                                    commonCode();         
                                    ..specific code for DB
                                   }
                          }, 
         NETWORK_PROCESS{
                       public void process(){
                                  ... specific code for network
                                  commonCode();
                                  ...specific code for network         
                                   }
                         };
    
         public void process(){
         }
    
         public void commonCode(){
    
                 ... common code
         }  
         }
    

    怎么打电话?

    ProcessManager.DB_PROCESS .process(); ProcessManager.NETWORK_PROCESS.process();

    记住枚举是实现单例类的最佳方式(effective-java-2nd-edition)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-15
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多