从产品设计中获取零件类

时间:2014-10-11 20:17:13

标签: java oop design-patterns

我在游戏库中设计零件时遇到问题。我在分离的类中有更多的部分(例如Matchmaking,Scheduler,Auth,EventProcessor,......)。

运行时将使用一个实例(不需要两个Scheduler或Matchmaking类)。我已经看到了访问这些课程的多种方式。

在下文中,ProductName是库的名称,PartName是类的名称。

  • 第一种方法是名为 ProductName 的类,它有静态方法,如 ProductName.getPartName(),然后调用 ProductName.getPartName( ).CALL()

  • 第二个是使用单例模式 PartName.getInstance())完成的,调用是 PartName.getInstance()。call ()

  • 第三个是将类中的所有方法标记为静态,因此调用 PartName.call()

最佳方式/最佳设计是什么?

感谢您的回答!

祝你好运!

1 个答案:

答案 0 :(得分:1)

如果您需要在项目中只有一个类的实例,则可能需要应用Singleton Software Pattern。有了这个,项目中总会只有一个Singleton实例。此代码是Singleton的一个示例,包括测试:

ClassicSingleton.java:

public class ClassicSingleton {
   private static ClassicSingleton instance = null;
   protected ClassicSingleton() {
      // Exists only to defeat instantiation.
   }
   public static ClassicSingleton getInstance() {
      if(instance == null) {
         instance = new ClassicSingleton();
      }
      return instance;
   }
} 

SingletonTestCase.java:

import org.apache.log4j.Logger;
import junit.framework.Assert;
import junit.framework.TestCase;
public class SingletonTest extends TestCase {
   private ClassicSingleton sone = null, stwo = null;
   private static Logger logger = Logger.getRootLogger();
   public SingletonTest(String name) {
      super(name);
   }
   public void setUp() {
      logger.info("getting singleton...");
      sone = ClassicSingleton.getInstance();
      logger.info("...got singleton: " + sone);
      logger.info("getting singleton...");
      stwo = ClassicSingleton.getInstance();
      logger.info("...got singleton: " + stwo);
   }
   public void testUnique() {
      logger.info("checking singletons for equality");
      Assert.assertEquals(true, sone == stwo);
   }
}

结果:

Buildfile: build.xml
init:
     [echo] Build 20030414 (14-04-2003 03:08)
compile:
run-test-text:
     [java] .INFO main: getting singleton...
     [java] INFO main: created singleton: Singleton@e86f41
     [java] INFO main: ...got singleton: Singleton@e86f41
     [java] INFO main: getting singleton...
     [java] INFO main: ...got singleton: Singleton@e86f41
     [java] INFO main: checking singletons for equality
     [java] Time: 0.032
     [java] OK (1 test)

正如你在结果中看到的那样,使用的两个单身人士给出了相同的记忆参考; Singleton@e86f41。因此,它们是同一个对象,这是期望的行为。

希望它有所帮助,

Clemencio Morales Lucas。