最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

《Head First 設(shè)計模式》代碼之PHP版(面向?qū)ο髮W(xué)習(xí))第2/2頁

 更新時間:2010年06月27日 01:34:54   作者:  
《Head First 設(shè)計模式》是本不錯的講解設(shè)計模式的書,不像F4寫的那么枯燥,應(yīng)該算是比較容易理解的好書。


觀察者模式
復(fù)制代碼 代碼如下:

<?php
/**
* 觀察者模式
* 定義了對象之間的一對多依賴,當(dāng)一個對象改變狀態(tài)時,
* 它的所有依賴者都會收到通知并自動更新。
*/
interface Subject {
public function registerObserver(Observer $o);
public function removeObserver(Observer $o);
public function notifyObservers();
}
interface Observer {
public function update($temperature, $humidity, $pressure);
}
interface DisplayElement {
public function display();
}
class WeatherData implements Subject {
private $observers = array();
private $temperature;
private $humidity;
private $pressure;
public function __construct() {
$this->observers = array();
}
public function registerObserver(Observer $o) {
$this->observers[] = $o;
}
public function removeObserver(Observer $o) {
if (($key = array_search($o, $this->observers)) !== false) {
unset($this->observers[$key]);
}
}
public function notifyObservers() {
foreach ($this->observers as $observer) {
$observer->update($this->temperature, $this->humidity, $this->pressure);
}
}
public function measurementsChanged() {
$this->notifyObservers();
}
public function setMeasurements($temperature, $humidity, $pressure) {
$this->temperature = $temperature;
$this->humidity = $humidity;
$this->pressure = $pressure;
$this->measurementsChanged();
}
}
class CurrentConditionsDisplay implements Observer, DisplayElement {
private $temperature;
private $humidity;
private $weatherData;
public function __construct(Subject $weatherData) {
$this->weatherData = $weatherData;
$weatherData->registerObserver($this);
}
public function update($temperature, $humidity, $pressure) {
$this->temperature = $temperature;
$this->humidity = $humidity;
$this->display();
}
public function display() {
echo "溫度:" . $this->temperature . "; 濕度:" . $this->humidity . "%\n";
}
}
class StatistionsDisplay implements Observer, DisplayElement {
private $temperature;
private $humidity;
private $pressure;
private $weatherData;
public function __construct(Subject $weatherData) {
$this->weatherData = $weatherData;
$weatherData->registerObserver($this);
}
public function update($temperature, $humidity, $pressure) {
$this->temperature = $temperature;
$this->humidity = $humidity;
$this->pressure = $pressure;
$this->display();
}
public function display() {
echo "溫度:" . $this->temperature . "; 濕度:" . $this->humidity . "%; 氣壓:" . $this->pressure . "\n";
}
}
$weatherData = new WeatherData();
$currentDisplay = new CurrentConditionsDisplay($weatherData);
$statistionDisplay = new StatistionsDisplay($weatherData);
$weatherData->setMeasurements(10, 20, 30);
$weatherData->removeObserver($currentDisplay);
$weatherData->setMeasurements(30, 40, 50);
?>

命令模式
復(fù)制代碼 代碼如下:

<?php

class Light {
public function __construct() {

}

public function on() {
echo "Light On\n";
}

public function off() {
echo "Light Off\n";
}
}

interface Command {
public function execute();
}

class LightOnCommand implements Command {
public $light;

public function __construct(Light $light) {
$this->light = $light;
}

public function execute() {
$this->light->on();
}
}

class SimpleRemoteControl {
public $slot;

public function __construct() {

}

public function setCommand(Command $command) {
$this->slot = $command;
}

public function buttonWasPressed() {
$this->slot->execute();
}
}

class RemoteControlTest {
public static function main() {
$remote = new SimpleRemoteControl();
$light = new Light();
$lightOn = new LightOnCommand($light);
$remote->setCommand($lightOn);
$remote->buttonWasPressed();
}
}

RemoteControlTest::main();

?>

裝飾者模式
復(fù)制代碼 代碼如下:

<?php
/**
* 裝飾著模式
* 動態(tài)地將責(zé)任附加到對象上,若要擴(kuò)展功能,裝飾者提供了比繼承更有彈性的替代方案。
*/
abstract class Beverage {
public $description = "Unknown Beverage";

public function getDescription() {
return $this->description;
}

public abstract function cost();
}

abstract class CondimentDecorator extends Beverage {
//JAVA代碼里這里是個抽象類,PHP不允許這么做
public function getDescription() {
return $this->description;
}
}

class Espresso extends Beverage {
public function __construct() {
$this->description = "Espresso";
}

public function cost() {
return 1.99;
}
}

class HouseBlend extends Beverage {
public function __construct() {
$this->description = "HouseBlend";
}

public function cost() {
return .89;
}
}

class DarkRoast extends Beverage {
public function __construct() {
$this->description = "DarkRoast";
}

public function cost() {
return .99;
}
}

class Mocha extends CondimentDecorator {
public $beverage;

public function __construct(Beverage $beverage) {
$this->beverage = $beverage;
}
public function getDescription() {
return $this->beverage->getDescription() . ", Mocha";
}
public function cost() {
return .20 + $this->beverage->cost();
}
}

class Whip extends CondimentDecorator {
public $beverage;

public function __construct(Beverage $beverage) {
$this->beverage = $beverage;
}
public function getDescription() {
return $this->beverage->getDescription() . ", Whip";
}
public function cost() {
return .10 + $this->beverage->cost();
}
}

class Soy extends CondimentDecorator {
public $beverage;

public function __construct(Beverage $beverage) {
$this->beverage = $beverage;
}
public function getDescription() {
return $this->beverage->getDescription() . ", Soy";
}
public function cost() {
return .15 + $this->beverage->cost();
}
}

$beverage = new Espresso();
echo $beverage->getDescription() . "\n";
$beverage2 = new DarkRoast();
$beverage2 = new Mocha($beverage2);
$beverage2 = new Mocha($beverage2);
$beverage2 = new Whip($beverage2);
echo $beverage2->getDescription() . " $" . $beverage2->cost() . "\n";

$beverage3 = new HouseBlend();
$beverage3 = new Soy($beverage3);
$beverage3 = new Mocha($beverage3);
$beverage3 = new Whip($beverage3);
echo $beverage3->getDescription() . " $" . $beverage3->cost() . "\n";
?>

狀態(tài)模式
復(fù)制代碼 代碼如下:

<?php

class GumballMachine {
const SOLD_OUT = 0;
const NO_QUARTER = 1;
const HAS_QUARTER = 2;
const SOLD = 3;

public $state = self::SOLD_OUT;
public $count = 0;

public function __construct($count) {
$this->count = $count;
if ($count > 0) {
$this->state = self::NO_QUARTER;
}
}

public function insertQuarter() {
if ($this->state == self::HAS_QUARTER) {
echo "You can't insert another quarter!\n";
} else if ($this->state == self::NO_QUARTER) {
$this->state = self::HAS_QUARTER;
echo "You inserted a quarter!\n";
} else if ($this->state == self::SOLD_OUT) {
echo "You can't insert a quarter, the machine is sold out!\n";
} else if ($this->state == self::SOLD) {
echo "Please wait, we're already giving you a gumball!\n";
}
}
}

$obj = new GumballMachine(0);
print_r($obj)

?>

相關(guān)文章

最新評論

南投县| 林甸县| 雷波县| 兰西县| 南岸区| 衡阳县| 蓝山县| 横峰县| 曲阜市| 卢湾区| 石渠县| 资源县| 耒阳市| 大连市| 平利县| 长乐市| 溧水县| 肃宁县| 沂南县| 专栏| 英德市| 玉屏| 长汀县| 普兰县| 泌阳县| 藁城市| 厦门市| 内黄县| 桑日县| 乾安县| 许昌市| 洞口县| 大田县| 颍上县| 五莲县| 永安市| 嘉兴市| 沁阳市| 平舆县| 孟津县| 凌海市|