PHP Duck示例-从头开始-设计模式-第一章
||
这是我问许多其他人的第一个问题。
这里有人可能会令我发疯,因为我正在使用PHP-OO关注问题书名中提到的书。
在第一章中,作者介绍了一个名为\'SimUDuck \'的简单项目,尽管我已经用Java复制了相同的项目,但是我想知道如何使用PHP复制相同的项目。
最后,SimUDuck的项目创建了两(2)个接口(FlyBehavior和QuackBehavior),超过五(5)个实现这些接口的类(例如FlyWithWings(),Quack()等),一个名为Duck和三(3)或四(4)个不同的鸭子种类类别扩展了Duck(Mallard,HeadRedDuck,RubberDuck等),只是为了说明编程接口的重要性。
为了模拟Java主要方法环境,我创建了一个名为MiniDuckSimulator的PHP类,其中包括函数\'public static function main()\',并且在同一脚本中添加了\“ MiniDuckSimulator :: main() ; \“。该脚本可以正常运行。
有趣的问题是,不调用任何QuackBehavior :: quack()实现的方法,就会显示回显“ Quack!quack!”。那些读过这本书的人知道我在说什么。
注意:以下是脚本的特定部分:
interface FlyBehavior {
public function fly();
}
interface QuackBehavior {
public function quack();
}
include_once \'FlyBehavior.php\';
class FlyWithWings implements FlyBehavior {
public function fly() {
echo \'I\'m flying!<br />\';
}
}
include_once \'QuackBehavior.php\';
class Quack implements QuackBehavior {
public function quack() {
echo \'Quack!<br />\';
}
}
abstract class Duck {
protected $flyBehavior;
protected $quackBehavior;
function __construct() {
}
public function performFly(){
$this->flyBehavior->fly();
}
public function performQuack(){
$this->quackBehavior->quack();
}
public function setFlyBehavior($flyBehavior){
$this->flyBehavior = $flyBehavior;
}
public function swim(){
echo \"All the ducks float, including the decoy!<br />\";
}
}
include_once \'Duck.php\';
include_once \'FlyWithWings.php\';
include_once \'Quack.php\';
class Mallard extends Duck {
function __construct() {
$this->flyBehavior = new FlyWithWings();
$this->quackBehavior = new Quack();
}
}
class MiniDuckSimulator {
public static function main(){
$mallard = new Mallard();
$mallard->performFly();
}
}
MiniDuckSimulator::main();
提前致谢。
LucDaher。
没有找到相关结果
已邀请:
4 个回复
驮帽俺篮号
这是您的问题:如果仅运行
,则php将自动将
方法作为构造函数执行,因为它与您的类同名。 -我看到您在问题中引用了Java,因此这对您来说不是一个陌生的概念。
可能更好的方法
输出量
缮淳彼誊
秃拳割
你看到更多嘎嘎吗?如果是这样,那么在您的代码中有一个包含此字符串的echo / exit / die!
擅香