例如,我有几个不同的商人客户,我为他们处理交易。他们需要不同的衡量标准来确定欺诈行为,其中许多是常见的。我想做点什么,效果如下:
class Fraud
{
}
class InvalidCheckFraud extends Fraud
{
}
class NotAMemberFRaud extends Fraud
{
}
class CustomerLooksFunnyFraud extends Fraud
{
}
等。。。
我只想使用如下命令运行零到多个扩展欺诈类:
$fraudCheck = new Fraud();
$fraudCheck->checkMerchant($merchId);
我不介意用完全土生土长的方式解决这个问题,但如果已经解决了,我想走那条路。
我在用php编写代码,但是可以使用任何其他语言进行引用。
最佳答案
看起来你在找类似Strategy pattern的东西。
您应该为接受Fraud
的$merchId
类定义一个接口:
interface Fraud {
public function check($merchId);
}
然后实现每个子类:
class InvalidCheckFraud implements Fraud {
public function check($merchId) {
// do something and return
return true;
}
}
class NotAMemberFraud implements Fraud
{
public function check($merchId) {
// do something and return
return false;
}
}
然后,创建一个上下文类来检查每个上下文类:
class FraudContext implements Fraud {
protected $_frauds = array();
public function addFraud(Fraud $fraud) {
$this->_frauds[] = $fraud;
}
public function check($merchId) {
foreach ($this->_frauds as $fraud) {
if (!$fraud->check($merchId)) {
throw new LogicException(
"{$merchId} has failed the check for ".get_class($fraud)
);
}
}
return true;
}
}
$merchId = 42;
$context = new FraudContext;
$context->addFraud(new InvalidCheckFraud);
$context->addFraud(new NotAMemberFRaud);
$context->check($merchId);
关于php - 父类是否有通用的设计模式来调用其几个子类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8055268/