何时使用战略模式?
我看到像这样的客户端代码片段:
class StrategyExample {
public static void main(String[] args) {
Context context;
// Three contexts following different strategies
context = new Context(new ConcreteStrategyAdd());
int resultA = context.executeStrategy(3,4);
context = new Context(new ConcreteStrategySubtract());
int resultB = context.executeStrategy(3,4);
context = new Context(new ConcreteStrategyMultiply());
int resultC = context.executeStrategy(3,4);
}
}
看起来你可以将它重构为:
class StrategyExample {
public static void main(String[] args) {
// Three contexts following different strategies
int resultA =new ConcreteStrategyAdd().execute(3,4);
int resultB =new ConcreteStrategySubtract().execute(3,4);
int resultC =new ConcreteStrategyMultiply().execute(3,4);
}
} …Run Code Online (Sandbox Code Playgroud) PHP中的strtotime()可以执行以下转换:
输入:
strtotime(’2004-02-12T15:19:21+00:00?); strtotime(’Thu, 21 Dec 2000 16:01:07 +0200?); strtotime(’Monday, January 1st’); strtotime(’tomorrow’); strtotime(’-1 week 2 days 4 hours 2 seconds’);
输出:
2004-02-12 07:02:21 2000-12-21 06:12:07 2009-01-01 12:01:00 2009-02-12 12:02:00 2009-02-06 09:02:41
在java中有一种简单的方法吗?
是的,这是重复的.但是,最初的问题没有得到回答.我通常需要能够查询过去的日期.我想让用户能够说'我想要所有事件从"-1周"到"现在"'.它将使这些类型的请求更容易编写脚本.
我有以下代码:
@Test
public void springTest() throws SQLException{
//Connect to the DB.
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.h2.Driver");
dataSource.setUrl("jdbc:h2:/data/h2/testa");
dataSource.setUsername("");
dataSource.setPassword("");
JdbcTemplate jt=new JdbcTemplate(dataSource);
jt.execute("SELECT 1");
jt.execute("SELECT 1");
}
我希望两个execute()行重用相同的连接.但是,日志输出说:
2011-02-10 12:24:17 DriverManagerDataSource [INFO] Loaded JDBC driver: org.h2.Driver 2011-02-10 12:24:17 JdbcTemplate [DEBUG] Executing SQL statement [SELECT 1] 2011-02-10 12:24:17 DataSourceUtils [DEBUG] Fetching JDBC Connection from DataSource 2011-02-10 12:24:17 DriverManagerDataSource [DEBUG] Creating new JDBC DriverManager Connection to [jdbc:h2:/data/h2/testa] 2011-02-10 12:24:17 DataSourceUtils [DEBUG] Returning JDBC Connection to DataSource 2011-02-10 12:24:17 JdbcTemplate [DEBUG] Executing …
我只是尝试使用MinGW在MSYS中构建netcat,并意识到MinGW从未真正将所有BSD套接字移植到Windows(例如sys/socket.h).我知道你可以在MinGW中使用Windows套接字,但为什么他们从不制作BSD套接字的Windows端口?我注意到有很多程序使用#ifdef来解决这个问题.是否有某个可以使用的BSD套接字的Windows端口?
以下是在MSYS中为netcat执行make时的错误:
gcc -DLOCALEDIR=\"\/usr/local/share/locale\" -DHAVE_CONFIG_H -I. -I. -I.. -g -O2 -Wall -c `test -f 'core.c' || echo './'`core.c
In file included from core.c:29:
netcat.h:38:24: sys/socket.h: No such file or directory
netcat.h:39:63: sys/uio.h: No such file or directory
netcat.h:41:24: netinet/in.h: No such file or directory
netcat.h:42:55: arpa/inet.h: No such file or directory
MinGW没有#ifdef.是否有一个库/包我可以添加到MSYS,使一切编译没有错误?
我有一个将写入输出文件的bash程序.此文件可能存在也可能不存在,但脚本必须检查权限并尽早失败.我无法找到一种优雅的方式来实现这一目标.这是我尝试过的.
set +e touch $file set -e if [ $? -ne 0 ]; then exit;fi
我继续set -e这个脚本,所以如果任何一行都有错误,它就会失败.有没有更简单的方法来执行上述脚本?
我只是想得到一个可能是也可能不是gzip的文件的编号.但是,似乎sed中的正则表达式不支持a ?.这是我试过的:
echo 'file_1.gz'|sed -n 's/.*_\(.*\)\(\.gz\)?/\1/p'
没有任何回报.然后我?在正在分析的字符串中添加了一个:
echo 'file_1.gz?'|sed -n 's/.*_\(.*\)\(\.gz\)?/\1/p'
得到了:
1
因此,看起来?sed中不支持大多数正则表达式中使用的,对吧?那么,我想要sed给一个1for file_1和file_1.gz.如果执行时间至关重要,那么在bash脚本中执行此操作的最佳方法是什么?
有些时候我有一个代码片段,我想在缺陷跟踪器,维基,论坛等上发布,但它在代码中有很深的缩进.我通常必须突出显示代码片段,点击<shift> - <tab>直到缩进不是那么糟,然后复制/粘贴然后还原代码.这有点痛苦.
是否有工具可以删除每行前面的标签?请注意,我不想删除所有行中的所有选项卡,只是从每行中删除相同的前一个选项卡.我在想Emacs的一些功能可以做到这一点.
这是一个极端的例子:
之前:
//This is usually some method in an anonymous inner class' anonymous inner class.
@Override
public void method(){
doSomething();
}
后:
//This is usually some method in an anonymous inner class' anonymous inner class.
@Override
public void method(){
doSomething();
}
请注意doSomething()如何在它前面只有一个标签.
我有一个来自另一个程序的多行字符串,我想将其转换为SQL命令.我希望printf可以帮助我,但它似乎不起作用:
echo -e '1\n2\n3'|printf 'SELECT %s INTO MyTable'
我希望看到:
SELECT '1 2 3' INTO MyTable
但我得到了:
SELECT INTO MyTable
如何让%s读取标准输入?
我有一个正在CGI中使用的bash脚本.CGI通过读取$QUERY_STRINGURL中的所有内容来设置$ QUERY_STRING环境变量.例如,http://example.com?a = 123&b = 456&c = ok设置?.
在某处我发现了以下丑陋:
QUERY_STRING=a=123&b=456&c=ok
将$ b设置为$ QUERY_STRING中找到的任何内容b=$(echo "$QUERY_STRING" | sed -n 's/^.*b=\([^&]*\).*$/\1/p' | sed "s/%20/ /g").但是,我的脚本已经增长到超过十个输入参数.有没有更简单的方法将$ QUERY_STRING中的参数自动转换为bash可用的环境变量?
也许我只会使用某种类型的for循环,但如果脚本足够智能以自动检测每个参数并且可能构建一个类似于以下内容的数组,那就更好了:
${parm[a]}=123
${parm[b]}=456
${parm[c]}=ok
Run Code Online (Sandbox Code Playgroud)
我怎么能写代码呢?
规则引擎和专家系统有什么区别?
例1:假设我有一个程序来确定新驾驶执照的到期日期.它需要签证有效期,护照号码,生日等输入.它根据此输入确定驾驶执照的到期日期.如果输入没有足够的有效标识来允许新的驾驶执照,它甚至会出错.
例2:假设我正在制作游戏Monopoly的在线版本.我希望能够改变比赛的规则(比如传球去400美元,或者没有人可以购买房产,直到他们两次落在同一个房产上等).我在代码中有一个模块来处理这些规则.
这些都是规则引擎还是专家系统?它们看起来都很相似.它只是一个同义词吗?