微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php-父类是否有通用的设计模式来调用其几个子类

例如,我有几个要处理交易的不同商人客户.他们需要不同的度量标准来确定欺诈行为,其中许多是很常见的.我想要一些效果

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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐