小编Use*_*er1的帖子

何时以及为什么要使用战略模式?

何时使用战略模式

我看到像这样的客户端代码片段:


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)

design-patterns strategy-pattern

26
推荐指数
2
解决办法
2万
查看次数

PHP中的PHP strtotime()

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周"到"现在"'.它将使这些类型的请求更容易编写脚本.

php java strtotime

25
推荐指数
1
解决办法
1万
查看次数

如何使用Spring的JdbcTemplate重用相同的连接?

我有以下代码:


    @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 …

java spring jdbc

25
推荐指数
5
解决办法
4万
查看次数

MinGW中的套接字

我只是尝试使用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,使一切编译没有错误?

注意:您可以下载的netcat 这里,浏览CVS回购这里

c++ sockets mingw msys

24
推荐指数
4
解决办法
6万
查看次数

Bash:如果文件不存在则创建一个文件,否则检查它是否可写

我有一个将写入输出文件的bash程序.此文件可能存在也可能不存在,但脚本必须检查权限并尽早失败.我无法找到一种优雅的方式来实现这一目标.这是我尝试过的.

set +e
touch $file
set -e

if [ $? -ne 0 ]; then exit;fi

我继续set -e这个脚本,所以如果任何一行都有错误,它就会失败.有没有更简单的方法来执行上述脚本?

linux bash

24
推荐指数
2
解决办法
7万
查看次数

用?与sed

我只是想得到一个可能是也可能不是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_1file_1.gz.如果执行时间至关重要,那么在bash脚本中执行此操作的最佳方法是什么?

linux bash sed

22
推荐指数
2
解决办法
1万
查看次数

不受限制的代码片段

有些时候我有一个代码片段,我想在缺陷跟踪器,维基,论坛等上发布,但它在代码中有很深的缩进.我通常必须突出显示代码片段,点击<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()如何在它前面只有一个标签.

emacs tabs

21
推荐指数
3
解决办法
7629
查看次数

在bash中格式化stdin

我有一个来自另一个程序的多行字符串,我想将其转换为SQL命令.我希望printf可以帮助我,但它似乎不起作用:

echo -e '1\n2\n3'|printf 'SELECT %s INTO MyTable'

我希望看到:

SELECT '1
2
3' INTO MyTable

但我得到了:

SELECT  INTO MyTable

如何让%s读取标准输入?

bash

21
推荐指数
2
解决办法
1万
查看次数

如何从bash CGI脚本解析$ QUERY_STRING

我有一个正在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)

我怎么能写代码呢?

bash cgi

20
推荐指数
3
解决办法
4万
查看次数

规则引擎与专家系统

规则引擎和专家系统有什么区别?

例1:假设我有一个程序来确定新驾驶执照的到期日期.它需要签证有效期,护照号码,生日等输入.它根据此输入确定驾驶执照的到期日期.如果输入没有足够的有效标识来允许新的驾驶执照,它甚至会出错.

例2:假设我正在制作游戏Monopoly的在线版本.我希望能够改变比赛的规则(比如传球去400美元,或者没有人可以购买房产,直到他们两次落在同一个房产上等).我在代码中有一个模块来处理这些规则.

这些都是规则引擎还是专家系统?它们看起来都很相似.它只是一个同义词吗?

computer-science rule-engine expert-system

19
推荐指数
1
解决办法
5251
查看次数