php-父类是否有通用的设计模式来调用其几个子类
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php-父类是否有通用的设计模式来调用其几个子类,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1420字,纯文字阅读大概需要3分钟。
内容图文
![php-父类是否有通用的设计模式来调用其几个子类](/upload/InfoBanner/zyjiaocheng/655/81d90760c49c42be9553ba886ed61661.jpg)
例如,我有几个要处理交易的不同商人客户.他们需要不同的度量标准来确定欺诈行为,其中许多是很常见的.我想要一些效果:
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-父类是否有通用的设计模式来调用其几个子类全部内容,希望文章能够帮你解决php-父类是否有通用的设计模式来调用其几个子类所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。