English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
단例 모드 개념
단例 모드는 전체 애플리케이션에서 클래스가 하나의 객체 인스턴스만 가지는 디자인 패턴입니다.
단例 모드의 특징
클래스는 전체 애플리케이션에서 하나의 인스턴스만 가집니다
클래스는 이 인스턴스를 자체적으로 생성해야 합니다
이 인스턴스를 전체 시스템에 제공해야 합니다
PHP에서 단例 모드 사용의 이유
저는 PHP에서 대부분의 작업이 mysql, redis, memcache 등 다양한 관계형 및 비관계형 데이터베이스와의 상호작용을 포함하여 수행됩니다. 따라서 애플리케이션에서는 많은 데이터베이스 연결 작업이 발생하며, 단例 모드를 사용하지 않으면 매번 new 작업을 수행해야 하며, 매번 new를 수행하면 많은 메모리 및 시스템 자원이 소모되며, 데이터베이스 연결을 열고 닫는 것은 데이터베이스에 대한 극대의 시험과 낭비입니다.
클래스의 유일한 인스턴스를 저장하는 정적 멤버 변수가 필요합니다(일반적으로 $instance가 비공개 변수입니다)
생성자와克隆 함수는 비공개로 선언되어야 하며, 외부 프로그램이 클래스를 new로 생성하여 단例 모드의 의미를 잃지 않도록 합니다
이 인스턴스에 대한 접근을 제공하는 공개静态 메서드를 제공해야 하며, 유일한 인스턴스의 참조를 반환해야 합니다
//디자인 패턴 //단例 모드는 동일한 객체를 사용합니다 //class Ren //{ // public $name; // private static $dx; //객체를 저장합니다 // // private function __construct() // { // // } // // public static function DuiXiang() // { // if(empty(self::$dx)) // { // self::$dx = new Ren(); // } // return self::$dx; // } //} // //$r = Ren::DuiXiang(); //생성자를 비공개로 변경합니다 //객체를 간접적으로 생성하는 메서드를 만듭니다 //이 메서드 안에 제한을 추가합니다
팩토리 클래스
은 다른 객체를 생성하기 위한 메서드를 포함한 클래스를 의미하며, 팩토리 클래스는 다양성 프로그래밍에서 매우 중요합니다. 이는 클래스를 동적으로 대체하고 설정을 수정할 수 있게 하여, 애플리케이션을 더 유연하게 만듭니다. 고급 PHP 개발자는 팩토리 패턴을 잘 이해해야 합니다.
공장 모델은 일반적으로 유사 인터페이스를 가진 다른 클래스를 반환하는 데 사용되며, 공장의 일반적인 사용법은 다양한 제공자를 생성하여, 응용 프로그램 로직이나 구성 설정에 따라哪一个 클래스를 인스턴스화 할지 결정할 수 있게 해줍니다. 예를 들어, 이러한 제공자를 사용하여 클래스를 확장할 수 있으며, 응용 프로그램의 다른 부분을 재구성하지 않아도 됩니다. 이렇게 하면 새로 확장된 이름을 사용할 수 있습니다.
일반적으로, 공장 모델은 중요한 생성자가 있으며, 일반 원칙에 따라 'Factory'라는 이름으로 명명됩니다. 그러나 이는 원칙에 불과하며, 공장 메서드는 임의의 이름을 가질 수 있으며, 이는 임의의 데이터 매개변수를 받을 수 있으며, 반드시 객체를 반환해야 합니다.
class YunSuan { public $a; public $b; function Suan() { echo "두 수를 계산합니다"; } class gongchang { //기능 : 매개변수를 제공하여 객체를 반환합니다. static function chanpin($name) { switch($name) { case "'+: return new jia(); break; case "-"; return new jian(); break; } } } $a=gongchang::chanpin("+");
이以上就是 본 문서의 전체 내용입니다. 본 문서의 내용이 여러분의 학습이나 업무에 도움이 되길 바랍니다. 또한,呐喊 교본에 많은 지원을 부탁드립니다!
공지: 본 문서의 내용은 인터넷에서 가져왔으며, 저작권은 원 저자에게 있으며, 인터넷 사용자가 자발적으로 기여하고 업로드한 내용입니다. 이 사이트는 저작권을 소유하고 있지 않으며, 인공적인 편집을 하지 않았으며, 관련 법적 책임도 부담하지 않습니다. 저작권 위반이 의심되는 내용을 발견하면 notice#w로 이메일을 보내 주세요.3codebox.com에 이메일을 보내면(#을 @으로 변경해야 합니다.) 신고하고 관련 증거를 제공하시면, 사실이 확인되면 이 사이트는 즉시 위반 내용을 삭제할 것입니다.