java - 从产品设计中获取零件类别

标签 java oop design-patterns

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

运行时将使用一个实例(不需要两个调度程序或匹配类)。我已经看到了访问这些类的多种方法。

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

  • 第一种方法是通过名为 ProductName 的类,它具有 ProductName.getPartName() 等静态方法,然后调用为 ProductName.getPartName( ).call()

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

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

最好的方法/最佳设计是什么?

感谢您的解答!

最诚挚的问候!

最佳答案

当您的项目中需要有一个类的唯一实例时,您可能需要应用 Singleton Software Pattern 。这样,您的项目中将始终只有一个单例实例。此代码是 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。因此,它们是同一个对象,这是所需的行为。

希望对你有帮助

克莱门西奥·莫拉莱斯·卢卡斯。

关于java - 从产品设计中获取零件类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26318870/

相关文章:

objective-c - 仅在参数更改时处理实例方法中的代码

oop - 继承和组合有什么区别?

java - 装饰者模式的困惑

java - 为什么要使用 getInstance

java - Gson.jar 不引用 Maven 依赖项,即使它已由 spring-boot 管理

java - ANDROID:从2个不同的 Activity (不同的 Intent )启动相同的 Activity

java - Hibernate一对一关系似乎仅在使用注释时才需要双向性

java - 使用 JDT 删除方法

python - Python 如何/何时垃圾收集包含所有自身类型集合的对象?

java - 使用继承与接口(interface)的装饰器设计模式