首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从产品设计中获取零件类

从产品设计中获取零件类
EN

Stack Overflow用户
提问于 2014-10-11 20:17:13
回答 1查看 69关注 0票数 0

我在设计游戏库中的部件方面有问题。我在分离类中有更多的部分(例如匹配、调度器、Auth、EventProcessor、.)。

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

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

  • 第一种方法是类ProductName.getPartName(),ProductName,它有类似于的静态方法,然后调用是ProductName.getPartName().call().。
  • 第二种方法是使用单例模式(PartName.getInstance()),进行调用,调用为PartName.getInstance().call().。
  • 第三种方法是将类中的所有方法标记为静态的,所以调用是PartName.call()。

对此最好的设计方法是什么?

谢谢你的回答!

诚挚的问候!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-13 11:27:58

当您需要在项目中有一个和一个类的实例时,您可能需要应用单例软件模式。这样,项目中总是只有Singleton的一个实例。此代码是Singleton的一个示例,测试包括:

ClassicSingleton.java:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
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);
   }
}

结果:

代码语言:javascript
运行
复制
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。因此,它们是相同的对象,这是期望的行为。

希望能帮上忙

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26318870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档