我需要创建一个策略模式,用户从二十或三十个唯一策略对象的列表中选择四个策略.随着项目的成熟,策略列表将会扩展,用户可以随时更改所选策略.
我打算将他们选择的策略名称存储为字符串,然后使用类似这样的方法来加载与他们选择的字符串相对应的策略类.
class StrategyManager { // simplified for the example
public $selectedStrategies = array();
public function __construct($userStrategies) {
$this->selectedStrategies = array(
'first' => new $userStrategies['first'],
'second' => new $userStrategies['second'],
'third' => new $userStrategies['third'],
'fourth' => new $userStrategies['fourth']
);
}
public function do_first() {
$this->selectedStrategies['first']->execute();
}
public function do_second() {
$this->selectedStrategies['second']->execute();
}
public function do_third() {
$this->selectedStrategies['third']->execute();
}
public function do_fourth() {
$this->selectedStrategies['fourth']->execute();
}
}
Run Code Online (Sandbox Code Playgroud)
我试图避免一个大的switch语句.我担心的是,这似乎有点儿Stringly Typed.有没有更好的方法来实现这个目标而不使用条件或大型switch语句?
BTW:用户在选择四种策略时不输入字符串.我需要维护一个字符串列表,以便在选择框中向用户显示,并在添加新策略对象时将新的字符串添加到列表中.
解释
ircmaxell表达了一些关于我正在尝试做什么的混淆.在上面的示例中,用户从列表中选择了四个策略,并将它们作为字符串数组传递给StrategyManager构造函数.创建相应的策略对象并将其存储在内部数组中,$this->selectedStrategies
"第一","第二","第三"和"第四"是用于四种不同选定策略的内部阵列的数组键.在构建StrategyManager对象之后,应用程序execute在整个过程的生命周期中的各个时刻使用四种策略的方法.
因此,简而言之......每次应用程序需要执行策略编号"one"的方法时,它都会这样做,并且结果会有所不同,具体取决于用户为策略"one"选择的策略
我有一个逻辑情况,最好描述为试图赢得任务的两个"团队".这项任务的结果可能是一个单一的胜利者,一个平局(平局),或者没有胜利者(僵局).
目前,我正在使用嵌套的if/else语句,如下所示:
// using PHP, but the concept seems language agnostic.
if ($team_a->win()) {
if ($team_b->win()) {
// this is a draw
} else {
// team_a is the winner
}
} else {
if ($team_b->win()) {
// team_b is the winner
} else {
// This is a stalemate, no winner.
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎很像意大利面和重复.我可以使用更合乎逻辑的DRY模式吗?
我是jQuery的新手.有人可以回答这个问题吗?
我知道我将使用以下代码行将layer1设置为layer2的位置.
$("#layer1").offset($("#layer2").offset());
Run Code Online (Sandbox Code Playgroud)
我怎样才能设置y值?对此我不确定.
谢谢
我正在打一个棒球相关的网站.我有一个桌子,有两个棒球队的击球阵容:
+----+----------+--------------+--------+
| id | playerId | battingOrder | active |
+----+----------+--------------+--------+
Run Code Online (Sandbox Code Playgroud)
击球顺序是1到20之间的整数.这对应于以下逻辑:
活动字段是一个tinyint 0或1,表示土墩上的投手和盘子上的击球手.
已知事实:一支球队总会有一名主动投手,另一支球队将有一名主动投手.
我需要编写一个查询,为主队球员返回一个对应于battingOrder中下一个击球手的行.(在活动击球手的击球后发生的那个)
例:
我之前从未使用过CASE查询,但我想出了以下内容:
SELECT *
FROM lineups
WHERE battingOrder =
CASE (
SELECT battingOrder
FROM lineups
WHERE battingOrder > 10 AND active = 1
LIMIT 1
)
WHEN 11 THEN 12
WHEN 12 THEN 13
WHEN 13 THEN 14
WHEN 14 THEN 15 …Run Code Online (Sandbox Code Playgroud) 我可以这样做吗?(我现在无法测试它自己看)
public function overSimplifiedTernaryTest($condition = false) {
return ($condition) ? 'someString' : 'someOtherString';
}
Run Code Online (Sandbox Code Playgroud) 我在PHP中有一个密码验证脚本,它检查一些不同的正则表达式,并根据哪一个失败抛出一个唯一的错误消息.以下是正则表达式的数组以及匹配失败时引发的错误消息:
array(
'rule1' => array(
'/^.*[\d].*$/i',
'Password must contain at least one number.'
),
'rule2' => array(
'/^.*[a-z].*$/i',
'Password must contain at least one lowercase letter'
),
'rule3' => array(
'/^.*[A-Z].*$/i',
'Password must contain at least one uppercase letter'
),
'rule4' => array(
'/^.*[~!@#$%^&*()_+=].*$/i',
'Password must contain at least one special character [~!@#$%^&*()_+=]'
)
);
Run Code Online (Sandbox Code Playgroud)
出于某种原因,无论我通过验证,"特殊字符"规则都会失败.我猜这是表达式的一个问题.如果有更好(或更正确)的方式来编写这些表达式,我全都耳朵!
这是我第一次尝试使用Backbone.js,所以我决定制作一个简单的测试应用程序来模拟带有菜单项的餐馆菜单.我跟随来自andyet.net的这篇很酷的博客文章.
将模型添加到集合时遇到问题.我已经将一个视图方法绑定到应该更新视图的集合的add事件.这是代码,尽可能多地删除不相关的代码.
(注意:var为了简洁起见,我删除了局部作用域声明和闭包等内容.以下内容仍然有点长,我知道这很烦人,但它应该非常简单易懂):
MenuItem = Backbone.Model.extend({
// initialize functions removed for brevity
});
Menu = Backbone.Model.extend({
// initialize functions removed for brevity
// MenuSelection property is defined here.
});
MenuSelection = Backbone.Collection.extend({ model: MenuItem });
MenuItemView = Backbone.View.extend({
// render template
});
/**
* This is unaltered from the code. The error occurs here.
*/
RestaurantAppView = Backbone.View.extend({
addMenuItem : function (MenuItem) {
var view = new MenuItemView({ model : MenuItem });
this.menuList.append(view.render().el);
// ERROR occurs …Run Code Online (Sandbox Code Playgroud) 我已经仔细阅读了Stack Exchange网站列表,我只能认为SO是正确的地方(至少我看到了一些excel问题).
我有一系列的价值观Sheet1.B3:B9.在另一张纸上,我试图从其中一个单元格中获取随机值.
我想它必须是RANK()功能的东西,但我正在抓住稻草.
如何获得该范围内随机单元格的值?
如果可能的话,我正在寻找一些建议.PHP不是我写的主要语言.它通常是带有C#的asp.net但是我正在帮助一个有网站的朋友并且他们要求php.
我正在为他们创建一个内部邮件系统.我有一个收件箱页面,每个记录都有一个勾选框.目前,您可以勾选多个方框,然后通过提交表单删除所选记录.我的朋友要求提供另一个按钮,可以单击该按钮将所选电子邮件标记为已读(如电子邮件收件箱).我不知道如何做到这一点,因为我知道只是在表单中添加另一个提交按钮,因为调用其他内容将无效.道歉,我不确定我是在解释自己.
撰写
$query ="Select im.ID, first_name, last_name, sender_ID, createddate, recipient_ID, read_mail, subject from internal_mail im join characters c on im.sender_ID = c.ID where im.recipient_name like '%".$character[first_name] . " " . $character[last_name] ."%' and im.active = 1";
$results = mysql_query($query);
$rows_events = mysql_num_rows($results);
if($rows_events != 0){
?>
<table>
<tr>
<td></td>
<td width="200">
From
</td>
<td width="150">
Subject
</td>
<td>
Date Sent
</td>
</tr>
<tr>
<?
$r = 0;
while ($r < $rows_events){
$read = mysql_result($results, $r , "read_mail");
$ID = …Run Code Online (Sandbox Code Playgroud) php ×6
jquery ×2
backbone.js ×1
case-when ×1
css ×1
formula ×1
javascript ×1
mocking ×1
mysql ×1
nested-if ×1
offset ×1
regex ×1
return-value ×1
select ×1
string ×1
subquery ×1
tdd ×1
undefined ×1
unit-testing ×1
view ×1