php设计模式之工厂方法模式

核能气质少年 提交于 2019-12-25 17:48:56

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

假设你正在开发一款物流管理应用。最初版本只能处理卡车运输,因此大部分代码都在位于名为卡车的类中。 一段时间后, 这款应用变得极受欢迎。你每天都能收到十几次来自海运公司的请求,希望应用能够支持海上物流功能。

//工厂方法模式
abstract class Logistics {
    abstract function createTransport(): Transport;

    //交付
    public function deliver() {
        $obj = $this->createTransport();
        $obj->deliver();
    }
}

//公路运输
class RoadLogistics extends Logistics {
    public function createTransport(): Transport {
        return new Truck();
    }
}

//海洋运输
class SeaLogistics extends Logistics {
    public function createTransport(): Transport {
        return new Ship();
    }
}

//运输
interface Transport {
    public function deliver();
}

//卡车运输
class Truck implements Transport {
    public function deliver() {
        echo '卡车走陆路交付货物';
    }
}

//船运输
class Ship implements Transport {
    public function deliver() {
        echo '轮船走海路交付货物';
    }
}

$roadClient = new RoadLogistics();
$roadClient->deliver();

echo '<br/>';

$seaClient = new SeaLogistics();
$seaClient->deliver();


//tips: 工厂方法一般返回的对象通常叫做产品
//tips2: 有一个轻微的限制:子类仅在这些产品具有相同的基类或接口时才可以返回不同类型的产品。同样,基类中的factory方法应将其返回类型声明为此接口。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!