例如,我有几个不同的商人客户,我为他们处理交易。他们需要不同的衡量标准来确定欺诈行为,其中许多是常见的。我想做点什么,效果如下:

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/

10-10 17:39