<?php
header ( "Content-Type:text/html;charset=utf-8" );
/**
* 模板模式制定一个顶级逻辑框架,而将逻辑的细节留给具体的子类去实现。
* 角色:
抽象模板角色(MakePhone):抽象模板类,定义了一个具体的算法流程和一些留给子类必须实现的抽象方法。
具体子类角色(XiaoMi):实现MakePhone中的抽象方法,子类可以有自己独特的实现形式,但是执行流程受MakePhone控制。
*/
abstract class MakePhone {
protected $name;
public function __construct ( $name ) {
$this->name = $name;
}
public function Make () {
$this->makeScreen ();
$this->makeBattery ();
$this->makeCamera ();
echo "{$this->name}手机生产完毕!<br/><br/>";
}
public abstract function makeScreen ();
public abstract function makeBattery ();
public abstract function makeCamera ();
}
class Phone extends MakePhone {
public function __construct ( $name ) {
parent::__construct ( $name );
}
public function makeScreen () {
echo "{$this->name}屏幕ok!<br/>";
}
public function makeBattery () {
echo "{$this->name}电池ok!<br/>";
}
public function makeCamera () {
echo "{$this->name}相机ok!<br/>";
}
}
class IPhone extends MakePhone {
public function __construct ( $name ) {
parent::__construct ( $name );
}
public function makeScreen () {
echo "{$this->name}屏幕ok!<br/>";
}
public function makeBattery () {
echo "{$this->name}电池ok!<br/>";
}
public function makeCamera () {
echo "{$this->name}相机ok!<br/>";
}
public function makeInit () {
echo "{$this->name}OS初始化 ok!<br/>";
}
public function Make () {
$this->makeScreen ();
$this->makeBattery ();
$this->makeCamera ();
$this->makeInit();
echo "{$this->name}手机生产完毕!<br/><br/>";
}
}
$phoneObj = new Phone( 'Xiaomi ' );
$phoneObj->make ();
$phoneObj = new Phone( 'Huawei ' );
$phoneObj->make ();
$iphoneObj = new IPhone( 'IPhone ' );
$iphoneObj->make ();
网友评论