ホームページ バックエンド開発 PHPチュートリアル php设计模式 State (状态模式)_php技巧

php设计模式 State (状态模式)_php技巧

May 17, 2016 am 09:18 AM
PHPのデザインパターン state ステートモード

状态state模式是GOF23种模式中的一种,和命令模式一样,也是一种行为模式。状态模式和命令模式相当像,一样是“接口—实现类”这种模式的应用,是面向接口编程原则的体现。

状态模式属于对象创建型模式,其意图是允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了他的类。比较常见的例子是在一个表示网络连接的类TCPConnection,一个TCPConnection对象的状态处于若干不同的状态之一:连接已经建立(Established),正在监听,连接已经关闭(closed)。当一个TCPConnection对象收到其他对象的请求时,他根据自身的状态作出不同的反应。

例如:一个Open请求的结果依赖于该连接已关闭还是连接已建立状态。State模式描述了TCPConnection如何在每一种状态下表现出不同的行为。这一种模式的关键思想是引入了一个称为TCPState的抽象类表示网络的连接状态,TCPState类为各种表示不同的操作状态的字类声明了一个公共接口。TCPState的子类实现与特定的状态相关的行为。例如,TCPEstablished和TCPClosed类分别实现了特定于TCPConnection的连接已建立状态和连接已关闭状态的行为。

举例来说:一个人具有生气,高兴和抓狂等状态,在这些状态下做同一个事情可能会有不同的结果,一个人的心情可能在这三种状态中循环转变。使用一个moodState类表示一个人的心情,使用mad,Happy,Angry类代表不同的心情。

先看一个例子:

复制代码 代码如下:

/**
* 状态模式
*
* 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它所属的类
*
*/
interface State
{
public function handle($state);
public function display();
}
class Context
{
private $_state = null;
public function __construct($state)
{
$this->setState($state);
}
public function setState($state)
{
$this->_state = $state;
}
public function request()
{
$this->_state->display();
$this->_state->handle($this);
}
}
class StateA implements State
{
public function handle($context)
{
$context->setState(new StateB());
}
public function display()
{
echo "state A
";
}
}
class StateB implements State
{
public function handle($context)
{
$context->setState(new StateC());
}
public function display()
{
echo "state B
";
}
}
class StateC implements State
{
public function handle($context)
{
$context->setState(new StateA());
}
public function display()
{
echo "state C
";
}
}
// 实例化一下
$objContext = new Context(new StateB());
$objContext->request();
$objContext->request();
$objContext->request();
$objContext->request();
$objContext->request();

状态模式的理解,关键有2点:

1. 通常命令模式的接口中只有一个方法。 而状态模式的接口中有1个或者多个方法。而且,状态模式的实现类的方法,一般返回值;或者是改变实例变量的值。也就是说,状态模式一般和对象的状态有关。实现类的方法有不同的功能,覆盖接口中的方法。状态模式和命令模式一样,也可以用于消除if…else等条件选择语句。

2. 主要的用途是,作为实例变量,是一个对象引用。命令模式的主要的使用方式是参数回调模式。命令接口作为方法的参数传递进来。然后,在方法体内回调该接口。而状态模式的主要使用方法,是作为实例变量,通过set属性方法,或者构造器把状态接口的具体实现类的实例传递进来。因此,可以这样比较命令模式和状态模式的异同。

State模式和command模式都是十分常用,粒度比较小的模式,是很多更大型模式的一部分。基本上,state模式和command模式是十分相似的。只要开发者心中对单例和多例有一个清醒的认识,即使不把它们分为两种模式也没事。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPでよく使われるデザインパターンとその実装方法 PHPでよく使われるデザインパターンとその実装方法 Jun 27, 2023 pm 01:08 PM

PHP は広く使用されており、非常に人気のあるプログラミング言語です。 PHP は、今日の Web アプリケーションの非常に重要な部分です。デザイン パターンは、PHP アプリケーションの開発において重要な役割を果たします。デザイン パターンは、さまざまな環境で再利用できる問題を解決するためのテンプレートであり、より良いコードを作成し、コードの信頼性、保守性、拡張性を高めるのに役立ちます。この記事では、PHP で一般的に使用されるデザイン パターンとその実装方法について説明します。シングルトン パターン シングルトン パターンは、次のことを可能にする作成パターンです。

状態の変更に反応するメソッドは何ですか? 状態の変更に反応するメソッドは何ですか? Jan 06, 2023 am 09:18 AM

React が状態を変更するためのメソッドは次のとおりです: 1. 「this.setState({title:'React'});」メソッドを通じて状態を変更します; 2. 「this.setState((preState, props)」を通じて状態を変更します)=>counter:preState.quantity+ 1)" メソッドを使用して状態を変更します。 3. "replaceState" メソッドを使用してコンポーネントの状態を変更します。

React の state と props の違いは何ですか? React の state と props の違いは何ですか? Nov 17, 2020 pm 04:49 PM

違い: props はコンポーネントに渡されますが (関数の仮パラメーターと同様)、状態はコンポーネント自体の中で管理されます (関数内で宣言された変数と同様)。 State はコンポーネント自身のデータ管理と自身の状態の制御であり、変数であり、props は外部から渡されるデータパラメータであり、不変です。

phpのデザインパターンとは何ですか? phpのデザインパターンとは何ですか? Jul 25, 2023 am 09:39 AM

PHP デザイン パターンには次のものが含まれます: 1. シングルトン モード (クラスにインスタンス化されたオブジェクトが 1 つだけであることを保証します) 2. ファクトリ モード (オブジェクトのインスタンス化プロセスをファクトリ クラスにカプセル化します) 3. 抽象ファクトリ モード (Abstract Factory モード)ファクトリー オブジェクトを作成するパターン; 4. オブザーバー パターン、オブジェクト間の 1 対多の依存関係を実現する; 5. アダプター パターン、あるクラスのインターフェイスを別のクラスのインターフェイスに変換する; 6. デコレーター パターン、動的にいくつかの追加関数を追加するオブジェクト、7. イテレータパターン、8. ストラテジパターン、9. テンプレートメソッドパターンなど

PHP7.0のデザインパターンとは何ですか? PHP7.0のデザインパターンとは何ですか? May 26, 2023 am 09:21 AM

テクノロジーの継続的な発展に伴い、ソフトウェア開発におけるデザインパターンの重要性がますます高まっています。 PHP の最新バージョンである PHP7.0 には、多くのデザインパターンも統合されています。この記事では、PHP プログラマーがこれらのパターンをよりよく理解し、適用できるように、PHP7.0 のデザイン パターンについて説明します。シングルトン パターン シングルトン パターンは、クラスがインスタンスを 1 つだけ持ち、グローバル アクセス ポイントを提供することを保証する作成パターンです。 PHP7.0 では、__construct メソッドと静的メソッドを使用して、

PHP コアの設計パターンと実践 PHP コアの設計パターンと実践 Nov 08, 2023 pm 08:58 PM

PHP のコア デザイン パターンとプラクティスの紹介: デザイン パターンは、ソフトウェア開発で一般的に使用される問題解決テンプレートです。これらは、開発プロセス中にベスト プラクティスと優れたソフトウェア設計原則に従うのに役立つ再利用可能なソリューションを提供します。広く使用されているプログラミング言語である PHP には、コア開発で使用できる一般的で便利な設計パターンも多数あります。この記事では、いくつかの一般的な PHP 設計パターンを紹介し、関連するコード例を示します。 1. シングルトンモード(Singleton) シングルトンモードは、

PHP 入門: 状態パターン PHP 入門: 状態パターン May 20, 2023 am 10:51 AM

PHP 入門ガイド: ステート パターン ステート パターンは、オブジェクトが異なる内部状態の間で遷移できるようにする動作設計パターンであり、これらの状態が異なる動作操作をトリガーします。この記事では、PHP 開発者がこの重要な設計パターンをよりよく理解し、適用できるように、状態パターンの概念、実装、および使用シナリオを紹介します。概念的状態パターン (Statepattern) は、GoF デザイン パターン集で提案されているパターンです。主にオブジェクトの内部状態が変化するときについて説明します。

PHPフレームワークにデザインパターンを適用する方法を詳しく解説 PHPフレームワークにデザインパターンを適用する方法を詳しく解説 Jun 09, 2023 am 11:55 AM

PHP は Web 開発の分野で広く使用されているプログラミング言語であり、デザイン パターンはソフトウェア エンジニアリングで広く使用されている問題解決手法です。デザイン パターンを適用すると、スケーラビリティ、保守性、再利用性などの多くの側面でソフトウェアのパフォーマンスが向上し、タスクをより速く完了し、コードの重複を減らすことができます。 PHP では、フレームワークのパフォーマンスを向上させ、コードをより適切に整理および管理するためにデザイン パターンがよく使用されます。フレームワークは大量のビジネス ロジックと複雑なビジネス プロセスを処理する必要があるため、デザイン パターンは開発者に役立ちます。

See all articles