이 글에서는 PHP에서 가장 일반적으로 사용되는 세 가지 디자인 패턴인 싱글턴 디자인 패턴, 팩토리 디자인 패턴, 관찰자 디자인 패턴에 대해 간략하게 소개합니다. 이것들은 모두 개인적인 경험 요약입니다. 여러분이 좋아하길 바랍니다
이 기사는 PHP에서 일반적으로 사용되는 세 가지 디자인 패턴에 대한 메모이자 요약입니다. 어떤 언어를 사용하여 개발하든 디자인 패턴은 거의 항상 사용됩니다. . 디자인 패턴이 필요한 이유는 무엇입니까? 탄생은 우리 개발자들에게 어떤 역할과 의미를 갖는가?
iOS를 개발하시는 분들은 디자인 패턴에 익숙하실 거라 믿습니다. 예를 들어 싱글턴 디자인 패턴, 팩토리 디자인 패턴, Observer 패턴, MVC 프레임워크 디자인 패턴 등이 있습니다.
다음으로 PHP에서 가장 일반적으로 사용되는 세 가지 디자인 패턴인 싱글턴 디자인 패턴, 팩토리 디자인 패턴, 관찰자 디자인 패턴을 배워보겠습니다.
단일 케이스 디자인 패턴
소위 단일 케이스 패턴은 이 클래스의 인스턴스가 애플리케이션에 최대 한 개만 존재한다는 것을 의미합니다. 한번 생성되면 항상 메모리에 존재합니다!
싱글턴 디자인 패턴은 데이터베이스 클래스 디자인에 자주 사용됩니다. 싱글턴 패턴은 여러 데이터베이스 연결이 열리는 것을 방지하기 위해 데이터베이스에 한 번만 연결하는 데 사용됩니다.
싱글턴 클래스는 다음과 같은 특성을 가져야 합니다.
싱글턴 클래스는 직접 인스턴스화로 생성할 수 없으며 클래스 자체에 의해서만 인스턴스화될 수 있습니다. 따라서 이러한 제한적인 효과를 얻으려면 constructor를 비공개로 표시하여 클래스가 인스턴스화되지 않도록 해야 합니다.
클래스 인스턴스를 저장하고 인스턴스에 액세스할 수 있는 공용 정적 메서드를 노출하려면 전용 정적 멤버 변수가 필요합니다.
PHP에서는 다른 사람이 싱글톤 클래스 인스턴스를 복제하는 것을 방지하기 위해 일반적으로 빈 개인 clone()
메소드가 제공됩니다.
싱글턴 패턴의 예:
<?php /** * Singleton of Database */ class Database { // We need a static private variable to store a Database instance. privatestatic $instance; // Mark as private to prevent it from being instanced. privatefunctionconstruct() { // Do nothing. } privatefunctionclone() { // Do nothing. } publicstatic functiongetInstance() { if (!(self::$instanceinstanceofself)) { self::$instance = newself(); } returnself::$instance; } } $a =Database::getInstance(); $b =Database::getInstance(); // true var_dump($a === $b);
Factory 디자인 패턴
Factory 디자인 패턴은 다양한 입력 매개변수 또는 애플리케이션 구성을 기반으로 해당 클래스를 인스턴스화하고 반환하도록 특별히 설계된 클래스를 만드는 데 사용되는 경우가 많습니다.
예를 들어 직사각형과 원이 동일한 메소드를 가지고 있다고 가정합니다. 그런 다음 기본 클래스에서 제공하는 API를 사용하여 인스턴스를 생성하면 모두 매개변수를 전달하여 해당 클래스의 인스턴스를 자동으로 생성합니다. 둘레와 면적.
<?php interfaceInterfaceShape { functiongetArea(); functiongetCircumference(); } /** * 矩形 */ class Rectangle implementsInterfaceShape { private $width; private $height; publicfunctionconstruct($width, $height) { $this->width = $width; $this->height = $height; } publicfunctiongetArea() { return $this->width* $this->height; } publicfunctiongetCircumference() { return 2 * $this->width + 2 * $this->height; } } /** * 圆形 */ class Circle implementsInterfaceShape { private $radius; functionconstruct($radius) { $this->radius = $radius; } publicfunctiongetArea() { return M_PI * pow($this->radius, 2); } publicfunctiongetCircumference() { return 2 * M_PI * $this->radius; } } /** * 形状工厂类 */ class FactoryShape { publicstatic functioncreate() { switch (func_num_args()) { case1: return newCircle(func_get_arg(0)); case2: return newRectangle(func_get_arg(0), func_get_arg(1)); default: # code... break; } } } $rect =FactoryShape::create(5, 5); // object(Rectangle)#1 (2) { ["width":"Rectangle":private]=> int(5) ["height":"Rectangle":private]=> int(5) } var_dump($rect); echo "<br>"; // object(Circle)#2 (1) { ["radius":"Circle":private]=> int(4) } $circle =FactoryShape::create(4); var_dump($circle);
Observer 디자인 패턴
Observer 패턴은 매우 일반적인 디자인 패턴입니다. 올바르게 사용하면 프로그램에 큰 편리함을 가져다 줄 것입니다. 잘못 사용하면 미래 세대에 유지하기 어려운 아이디어가 생길 것입니다.
관찰자 패턴이란 무엇인가요? 객체는 다른 객체인 관찰자가 자신을 등록할 수 있도록 하는 메서드를 제공하여 자신을 관찰 가능하게 만듭니다. 관찰 가능한 객체가 변경되면 등록된 관찰자에게 메시지를 보냅니다. 이러한 관찰자는 이 정보를 사용하여 관찰 가능한 객체와 독립적인 작업을 수행합니다. 결과적으로 객체는 이유를 이해하지 않고도 서로 대화할 수 있습니다. 관찰자 패턴은 클래스가 다른 클래스의 상태를 관찰할 수 있도록 하는 이벤트 시스템입니다. 관찰된 클래스의 상태가 변경되면 관찰 클래스는 알림을 받고 해당 조치를 취할 수 있습니다. 구성 요소 간의 긴밀한 결합을 방지하는 기능이 있습니다. 아래 예시를 보시면 이해가 되실 거에요!
아아아아위 내용은 PHP에서 일반적으로 사용되는 세 가지 디자인 패턴인 싱글톤 디자인 패턴, 팩토리 디자인 패턴, 관찰자 디자인 패턴을 소개합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!