백엔드 개발 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 Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP에서 일반적으로 사용되는 디자인 패턴과 그 구현 방법 PHP에서 일반적으로 사용되는 디자인 패턴과 그 구현 방법 Jun 27, 2023 pm 01:08 PM

PHP는 널리 사용되고 매우 인기 있는 프로그래밍 언어입니다. PHP는 오늘날의 웹 애플리케이션에서 매우 중요한 부분입니다. 디자인 패턴은 PHP 애플리케이션 개발에 중요한 역할을 합니다. 디자인 패턴은 다양한 환경에서 재사용할 수 있는 문제 해결을 위한 템플릿입니다. 이는 더 나은 코드를 작성하고 코드를 더욱 안정적이고 유지 관리 및 확장 가능하게 만드는 데 도움이 됩니다. 이 기사에서는 PHP에서 일반적으로 사용되는 디자인 패턴과 이를 구현하는 방법을 살펴보겠습니다. 싱글톤 패턴 싱글톤 패턴은 다음을 허용하는 생성 패턴입니다.

상태 변경에 반응하는 방법은 무엇입니까? 상태 변경에 반응하는 방법은 무엇입니까? Jan 06, 2023 am 09:18 AM

상태를 변경하는 반응 방법은 다음과 같습니다. 1. "this.setState({title:'React'});"를 통해 상태를 수정합니다. 2. "this.setState((preState, props;)"를 통해 상태를 수정합니다. )=>counter:preState.Quantity+ 1)" 메소드로 상태를 수정합니다. 3. "replaceState" 메소드를 통해 컴포넌트의 상태를 변경합니다.

반응에서 상태와 소품의 차이점은 무엇입니까? 반응에서 상태와 소품의 차이점은 무엇입니까? Nov 17, 2020 pm 04:49 PM

차이점: props는 구성 요소에 전달되는 반면(함수의 형식 매개 변수와 유사) 상태는 구성 요소 자체 내에서 관리됩니다(함수 내에서 선언된 변수와 유사). 상태는 구성 요소의 자체 데이터 관리이며 자체 상태에 대한 제어입니다. 소품은 외부에서 전달된 데이터 매개 변수이며 변경할 수 없습니다.

Jul 25, 2023 am 09:39 AM

PHP 디자인 패턴은 다음과 같습니다. 1. 클래스에 인스턴스화된 객체가 하나만 있도록 보장하는 싱글톤 모드 2. 팩토리 클래스에서 객체의 인스턴스화 프로세스를 캡슐화하는 팩토리 모드 객체 생성의 팩토리 패턴 4. 객체 간의 일대다 종속성을 구현하는 관찰자 패턴 5. 한 클래스의 인터페이스를 다른 클래스의 인터페이스로 변환하는 어댑터 패턴 6. 동적으로 몇 가지 추가 기능을 추가합니다. 객체 7. 반복자 패턴 8. 전략 패턴 9. 템플릿 메소드 패턴 등

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 디자인 패턴 모음에서 제안된 패턴이다. 주로 객체의 내부 상태가 변경되는 경우를 설명합니다.

PHP7.0의 디자인 패턴은 무엇입니까? PHP7.0의 디자인 패턴은 무엇입니까? May 26, 2023 am 09:21 AM

기술이 지속적으로 발전함에 따라 소프트웨어 개발에서 디자인 패턴이 점점 더 중요해지고 있습니다. 최신 PHP 버전인 PHP7.0에는 다양한 디자인 패턴도 통합되어 있습니다. 이 기사에서는 PHP 프로그래머가 이러한 패턴을 더 잘 이해하고 적용할 수 있도록 PHP7.0의 디자인 패턴을 살펴보겠습니다. 싱글톤 패턴 싱글톤 패턴은 클래스에 하나의 인스턴스만 있고 전역 액세스 지점을 제공하는 생성 패턴입니다. PHP7.0에서는 __construct 메서드와 정적 메서드를 사용하여

PHP 객체지향 프로그래밍의 상태 패턴 분석 PHP 객체지향 프로그래밍의 상태 패턴 분석 Aug 13, 2023 pm 01:15 PM

PHP 객체 지향 프로그래밍의 상태 패턴 분석 소개: 객체 지향 프로그래밍에서 상태 패턴은 일반적인 디자인 패턴입니다. 내부 상태가 변경될 때 객체의 동작을 변경하는 동시에 이러한 변경 사항을 외부 객체에 투명하게 만듭니다. PHP에서는 상태 패턴을 사용하여 객체의 다양한 상태와 동작을 적절하게 처리하여 코드의 가독성과 유지 관리성을 향상시킬 수 있습니다. 이 기사에서는 정의 및 구현은 물론 몇 가지 일반적인 애플리케이션 시나리오를 포함하여 PHP의 상태 패턴을 자세히 소개합니다. 1. 상태 모델 개요 상태 모델은

See all articles