大佬教程收集整理的这篇文章主要介绍了php – 如何描述3件物品之间的岩纸剪刀关系?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
abstract class Hand {} class Rock extends Hand {} class Paper extends Hand {} class Scissors extends Hand {}
目标是制作一个功能(或一个方法)Hand :: compareHands(Hand $hand1,Hand $hand2),这将以一张岩石剪刀的比赛返回获胜的手.
然后,您不需要重复代码,而每个手形具有一个具体类型,因此您需要参数化.根据您可以允许的自由度,这可以像受保护的成员一样简单:
abstract class Hand { protected $beats; final public function beats(Hand $opponent) { return $opponent instanceof $this->beats; } } class Rock extends Hand { protected beats = 'Scissors'; } class Paper extends Hand { protected beats = 'Rock'; } class Scissors extends Hand { protected beats = 'Paper'; }
与Lusitanian’s answer比较,谁应该获得实际代码的学分,我只是重新排序了一点.但只有一点点.
此外,我需要给予信用@Leigh for the far better function and parameter naming.这应该减少评论的需要.
卢西斯坦建议的第二个选择可以用策略模式来表示.它也有点直截了当:
class EvaluateHands { private $rules; public function __construct(array $rules) { $this->rules = $rules; } public function compareHands(Hand $hand1,Hand $hand2) { return $this->rules[get_class($hand1)] === get_class($hand2) ? $hand1 : $hand2; } } new EvaluateHands( array( 'Rock' => 'Scissors','Paper' => 'Rock','Scissor' => 'Paper' ) );
两手之间的比较已经完全封装在EvaluateHands类型中,甚至可以配置(如果游戏规则改变),而双手将保持不变:
abstract class Hand {} class Rock extends Hand {} class Paper extends Hand {} class Scissors extends Hand {}
以上是大佬教程为你收集整理的php – 如何描述3件物品之间的岩纸剪刀关系?全部内容,希望文章能够帮你解决php – 如何描述3件物品之间的岩纸剪刀关系?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。