日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php 状态模式,PHP设计模式(十九)—状态模式 (State Pattern)

發布時間:2024/10/8 php 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 状态模式,PHP设计模式(十九)—状态模式 (State Pattern) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

狀態模式 (State Pattern) :允許一個對象在其內部狀態改變時改變它的行為,對象看起來似乎修改了它的類。其別名為狀態對象(Objects for States)

(一)為什么需要狀態模式

1,將所有與某個狀態有關的行為放到一個類中,并且可以方便地增加新的狀態,只需要改變對象狀態即可改變對象的行為。

2,本模式簡化了發起人類。發起人不再需要管理和保存其內部狀態的一個個版本,客戶端可以自行管理他們所要的這些狀態的版本。

(二)狀態模式 UML圖

(三)簡單實例

狀態模式一個最妙的應用就是通過變化狀態擁有不同的能力。比如我們以水為例,水如果是固態,那么它就能融化成液態,如果是液態那么它就能蒸發成氣態,而氣態也能凝華成固態。現在就讓我們用程序來模擬這個過程。

//抽象狀態類

abstract class State{

abstract function handle();

}

//固態

class Solid extends State{

public function handle(){

echo '固態 =>融化 =>液態轉化中'.PHP_EOL;

}

}

class Liquid extends State{

public function handle(){

echo '液態 =>蒸發 =>氣態轉化中'.PHP_EOL;

}

}

class Gas extends State{

public function handle(){

echo '氣態 =>凝華 =>固態轉化中'.PHP_EOL;

}

}

//context環境類 -----water

class Water{

protected $states = array();

protected $current=0;

public function __construct()

{

$this->states[]=new Solid;

$this->states[]=new Liquid;

$this->states[]=new Gas;

}

//水的變化

public function change(){

//告知當前狀態

echo '當前所處狀態'.get_Class($this->states[$this->current]).PHP_EOL;

//當前狀態能力

$this->states[$this->current]->handle();

//狀態變化

$this->changeState();

}

//狀態變化

public function changeState()

{

$this->current++ == 2 && $this->current = 0;

}

}

//實例化具體環境角色-----水

$water = new Water;

//水的能力變化 ---與它的狀態相關

$water->change();

$water->change();

$water->change();

$water->change();

當然我們這里只是一個簡單的示例,你完全可以讓一個狀態有多個能力,或者通過給water給一個對外的接口,通過傳參使其轉化為你指定的狀態。

總結

以上是生活随笔為你收集整理的php 状态模式,PHP设计模式(十九)—状态模式 (State Pattern)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。