我正在尝试使用工厂模式来创建一个QuestionTypeFactory,其中实例化的类将像MultipleChoice,TrueFalseQuestion等.
工厂代码看起来像这样
class QuestionFactory {
public enum QuestionType {
TrueFalse,
MultipleChoice,
Essay
}
public static Question createQuestion(QuestionType quesType) {
switch (quesType) {
case TrueFalse:
return new TrueFalseQuestion();
case MultipleChoice:
return new MultipleChoiceQuestion();
case Essay:
return new EssayQuestion();
}
throw new IllegalArgumentException("Not recognized.");
}
}
Run Code Online (Sandbox Code Playgroud)
这个现在可行了.如果我想添加另一个问题类型,我将需要修改工厂类,我不想这样做.
如何设置它以便每个问题类在Factory中注册自己,这样当我添加新的问题类型时,我不必更改工厂的代码?我对java有点新,我不知道该怎么做.
附加信息
所有问题类都实现了IQuestion接口.我正在寻找一种方法来实现像这样的方法
public static void registerType(QuestionType quesType, Class<IQuestion> ques)
Run Code Online (Sandbox Code Playgroud)
这样我就可以从我的类中的静态块调用这个方法,这样当我添加一个新的问题类型时,我就不必在Question Factory中更改或添加任何代码了.我知道我必须更改当前的实现以使其通用.我不确定我上面写的方法在语法上是否正确,但它在概念中显示了我想要的东西.
我知道这已经讨论了很多次但是在emacs中有没有很好的c/c ++ intellisense方法?我从来没有能够正确设置cedet.
现在我正在开发一个带有huuge代码库的维护项目,没有适当的智能感知就很难管理.目前我正在使用带有ctags/cscope的vim和用于intellisense的omnicomplete功能,效果很好; 但是我希望能够使用emacs.
任何人都可以协助我找到四元标准化的正确公式吗?
使用c ++和opengl.
谢谢!
我正在使用MySql Connector .NET加载帐户并将其传输到客户端.考虑要加载的帐户的子元素,此操作相当密集.
在调试模式下,加载帐户最多需要1秒.平均值为500毫秒.在发布模式下,加载帐户需要1到4秒.平均值为1500毫秒.
由于#if DEBUG我的代码中没有指令或类似内容,我想知道差异来自哪里.
是否有可以更改的项目构建选项?或者它与MySql Connector .NET有什么关系,根据构建模式会有不同的行为?
编辑:蜱虫监测.
Debug (Average: 213000 ticks)
730000
320000
60000
50000
190000
130000
210000
180000
160000
110000
390000
270000
150000
190000
230000
210000
150000
200000
190000
140000
Release (Average: 4404500 ticks)
12940000
170000
180000
80000
80000
130000
120000
5060000
5090000
130000
50000
10430000
25160000
150000
160000
130000
17620000
10160000
100000
150000
Run Code Online (Sandbox Code Playgroud)
比较:
Release需要20倍的调试时间(平均比较).
4,404,500/213,000 = 20
现在第一次操作确实更长,但总的来说,所有其他时间也是如此.任何的想法?
编辑2:我添加了更广泛的测试,计算总时间.对于50个帐户加载,调试平均需要4秒,发布时需要40秒.我开始对此非常绝望 - 这对我的应用程序来说是一个严重的性能问题.有没有人猜测如何解决这个问题?
int sampleArray[] = {1,2,3,4,5};
Run Code Online (Sandbox Code Playgroud)
我明白sampleArray现在指向数组的第一个元素.
但是,当我说的时候,它意味着什么&sampleArray?这是否意味着我得到sampleArray变量的地址?或者它是否意味着二维数组变量?
那么,我可以这样做:
int (*p)[5] = &sampleArray?
Run Code Online (Sandbox Code Playgroud) 对于我的编程语言类,一个小问题问:
FORTRAN中的局部变量是静态的还是堆栈动态的?局部变量是INITIALIZED的默认值是静态还是堆栈动态?向我展示一些代码,并附上解释以备份您的答案.提示:检查此方法的最简单方法是让程序测试子程序的历史敏感度.看看将局部变量初始化为某个值时会发生什么,而不是.您可能需要调用多个子程序才能放心地锁定答案.
我写了几个子程序: - 创建一个变量 - 打印变量 - 将变量初始化为一个值 - 再次打印变量
对子变量进行的每次连续调用都会在变量未初始化时打印出相同的随机值,然后打印出初始值.
当变量未初始化时,这个随机值是多少?
这是否意味着Fortran对每个子例程调用使用相同的内存位置,或者它是否动态创建空间并随机初始化变量?
我的第二个子程序也创建了一个变量,但随后调用了第一个子程序.结果是相同的,除了未初始化变量的随机数打印不同.我很迷茫.请帮忙!
非常感谢.
到目前为止,这是我的代码:
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
int main()
{
int count = 0;
string fileName;
string keyWord;
string word;
cout << "Please make sure the document is in the same file as the program, thank you!"
<< endl << "Please input document name: " ;
getline(cin, fileName);
cout << endl;
cout << "Please input the word you'd like to search for: " << endl;
cin >> keyWord;
cout << endl;
ifstream infile(fileName.c_str());
while(infile.is_open())
{
getline(cin,word);
if(word == keyWord)
{ …Run Code Online (Sandbox Code Playgroud) 假设我想要一个带有两个浮点数 (x和y)的函数,我想不使用它们的float表示来比较它们,而是使用它们作为 32 位的按位表示unsigned int。也就是说,像这样的数字-495.5具有位表示0b11000011111001011100000000000000或0xC3E5C000作为float,并且我有一个unsigned int具有相同位表示(对应于十进制值3286614016,我不在乎)。有没有什么简单的方法可以让我<=只使用它们各自unsigned int对应的信息中包含的信息来对这些浮点执行这样的操作?
我如何在沙发数据库中执行相当于"选择前10名"的查询?
例如,我有一个像这样的"架构":
title body modified
Run Code Online (Sandbox Code Playgroud)
我想选择最近10个修改过的文件.
如果有人能想出一种方法只针对每个类别做同样的事情,那么这是一个额外的好处.因此对于:
title category body modified
Run Code Online (Sandbox Code Playgroud)
返回每个类别中最新10个文档的列表.
我只是想知道在couchdb中是否可以进行这样的查询.
我总是听说Java是开源的,这是一个很大的好处,但是我没有看到Java是开源的应该让我使用它而不是封闭源的.NET. 这个网站有一些问答部分(特别是这些发展对行业有什么意义)给出了一些信息,但是Java是开源的唯一(或最大)优势?
由于我是初学者,有没有任何专业人士发现自改变以来有什么重大差异?
编辑:
请忽略这个问题的.NET部分,我只是将它用作比较. 我真正关心的是了解Java开源的好处.