PHP에서 일반적으로 사용되는 6가지 디자인 패턴(요약 공유)
이 글은 싱글턴 모드, 팩토리 모드, 등록 트리 모드, 전략 모드, 어댑터 모드, 관찰 등 6가지 주요 디자인 패턴과 관련된 이슈를 주로 소개하는 PHP에 대한 관련 지식을 제공합니다. 아래의 사용자 모드가 모든 사람에게 도움이 되기를 바랍니다.
추천 학습: "PHP 비디오 튜토리얼"
단일 케이스 모드
특징:
3개의 프라이빗과 한 개의 퍼블릭: 프라이빗 정적 변수(인스턴스 저장), 프라이빗 생성 방법( 인스턴스 생성 방지), 프라이빗 복제 방법(객체 복제 방지), 공용 정적 메소드(외부에 인스턴스 제공)
응용 시나리오:
프로그램 응용 프로그램에서 데이터베이스 작업이 포함될 때, 모든 작업 연결 데이터베이스에 많은 리소스를 소비하게 됩니다. 싱글톤 모드를 통해 고유한 데이터베이스 연결 개체를 생성할 수 있습니다.
<?phpclass Singleton{ private static $_instance; private function __construct(){} private function __clone(){} public static function getInstance() { if(self::$_instance instanceof Singleton){//instanceof 判断一个实例是否是某个类的对象 self::$_instance = new Singleton(); } return self::$_instance; }}
Factory 패턴
특징:
생성된 객체에서 호출 객체를 분리하고 호출자가 직접 팩토리를 요청하여 코드 결합을 줄이고 시스템의 유지 관리성과 확장성을 향상시킵니다.
응용 시나리오:
객체를 생성하는 특정 메서드가 포함된 클래스를 제공하면 new를 직접 사용하지 않고도 팩토리 클래스를 사용하여 객체를 생성할 수 있습니다. 이렇게 하면 생성된 객체의 유형을 변경하려는 경우 팩토리만 변경하면 됩니다.
//假设3个待实例化的类class Aclass{}class Bclass{}class Cclass{}class Factory{ //定义每个类的类名 const ACLASS = 'Aclass'; const BCLASS = 'Bclass'; const CCLASS = 'Cclass'; public static function getInstance($newclass) { $class = $newclass;//真实项目中这里常常是用来解析路由,加载文件。 return new $class; }}//调用方法:Factory::getInstance(Factory::ACLASS);
등록 트리 패턴
특징:
등록 트리 패턴은 객체 인스턴스를 전역 객체 트리에 등록하고 필요할 때 객체 트리에서 선택하는 패턴 설계 방법입니다.
응용 프로그램:
싱글톤 모드, 팩토리 모드 또는 둘의 조합을 통해 개체를 생성하더라도 해당 개체는 모두 등록 트리에 "삽입"됩니다. 개체를 사용할 때 등록 트리에서 직접 가져옵니다. 이는 전역 변수를 사용하는 것만큼 편리하고 실용적입니다. 그리고 등록 트리 패턴은 다른 패턴에 대한 아주 좋은 아이디어도 제공합니다. (다음 예는 싱글톤, 팩토리, 등록 트리를 결합하여 사용하는 것입니다.)
//创建单例class Single{ public $hash; static protected $ins=null; final protected function __construct(){ $this->hash=rand(1,9999); } static public function getInstance(){ if (self::$ins instanceof self) { return self::$ins; } self::$ins=new self(); return self::$ins; }}//工厂模式class RandFactory{ public static function factory(){ return Single::getInstance(); }}//注册树class Register{ protected static $objects; public static function set($alias,$object){ self::$objects[$alias]=$object; } public static function get($alias){ return self::$objects[$alias]; } public static function _unset($alias){ unset(self::$objects[$alias]); }}//调用Register::set('rand',RandFactory::factory());$object=Register::get('rand');print_r($object);
전략 패턴
정의:
일련의 알고리즘을 정의하고, 각 알고리즘을 캡슐화하고, 상호 교환 가능하게 만듭니다. 전략 패턴을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있습니다.
기능:
전략 패턴은 관련 알고리즘 계열을 관리하는 방법을 제공합니다. 전략 패턴은 상속 관계를 대체하는 방법을 제공합니다. 전략 패턴을 사용하면 여러 조건부 전송 문을 사용하지 않아도 됩니다.
애플리케이션 시나리오:
여러 클래스는 서로 다른 동작으로만 구별됩니다. 전략 모드를 사용하면 런타임에 실행할 특정 동작을 동적으로 선택할 수 있습니다. 예를 들어, 학교에 가는 방법에는 걷기, 버스, 지하철 등 다양한 전략이 있습니다...
abstract class Strategy{ abstract function goSchool();}class Run extends Strategy{ public function goSchool() { // TODO: Implement goSchool() method. }}class Subway extends Strategy{ public function goSchool() { // TODO: Implement goSchool() method. }}class Bike extends Strategy{ public function goSchool() { // TODO: Implement goSchool() method. }}class Context{ protected $_stratege;//存储传过来的策略对象 public function goSchoole() { $this->_stratege->goSchoole(); }}//调用:$contenx = new Context();$avil_stratery = new Subway();$contenx->goSchoole($avil_stratery);
어댑터 패턴
특징:
완전히 다른 다양한 기능 인터페이스를 통합 API로 캡슐화합니다.
응용 프로그램:
PHP에는 MySQL, MySQLi 및 PDO의 세 가지 데이터베이스 작업이 있습니다. 이는 어댑터 모드를 사용하여 서로 다른 데이터베이스 작업을 동일한 API로 통합할 수 있습니다. 유사한 시나리오에는 Memcache, Redis, 파일, APC 등과 같은 다양한 캐시 기능을 일관된 기능으로 통합할 수 있는 캐시 어댑터가 포함됩니다.
abstract class Toy{ public abstract function openMouth(); public abstract function closeMouth();}class Dog extends Toy{ public function openMouth() { echo "Dog open Mouth\n"; } public function closeMouth() { echo "Dog close Mouth\n"; }}class Cat extends Toy{ public function openMouth() { echo "Cat open Mouth\n"; } public function closeMouth() { echo "Cat close Mouth\n"; }}//目标角色(红)interface RedTarget{ public function doMouthOpen(); public function doMouthClose();}//目标角色(绿)interface GreenTarget{ public function operateMouth($type = 0);}//类适配器角色(红)class RedAdapter implements RedTarget{ private $adaptee; function __construct(Toy $adaptee) { $this->adaptee = $adaptee; } //委派调用Adaptee的sampleMethod1方法 public function doMouthOpen() { $this->adaptee->openMouth(); } public function doMouthClose() { $this->adaptee->closeMouth(); }}//类适配器角色(绿)class GreenAdapter implements GreenTarget{ private $adaptee; function __construct(Toy $adaptee) { $this->adaptee = $adaptee; } //委派调用Adaptee:GreenTarget的operateMouth方法 public function operateMouth($type = 0) { if ($type) { $this->adaptee->openMouth(); } else { $this->adaptee->closeMouth(); } }}class testDriver{ public function run() { //实例化一只狗玩具 $adaptee_dog = new Dog(); echo "给狗套上红枣适配器\n"; $adapter_red = new RedAdapter($adaptee_dog); //张嘴 $adapter_red->doMouthOpen(); //闭嘴 $adapter_red->doMouthClose(); echo "给狗套上绿枣适配器\n"; $adapter_green = new GreenAdapter($adaptee_dog); //张嘴 $adapter_green->operateMouth(1); //闭嘴 $adapter_green->operateMouth(0); }}//调用$test = new testDriver();$test->run();
Observer 패턴
특징:
Observer 패턴(Observer)은 객체의 상태가 변경되면 이에 의존하는 모든 객체가 알림을 받고 자동으로 업데이트됩니다. 관찰자 패턴은 낮은 결합, 비침해적 알림 및 업데이트 메커니즘을 구현합니다.
애플리케이션:
이벤트가 발생한 후 일련의 업데이트 작업을 수행해야 합니다. 전통적인 프로그래밍 방법은 이벤트 코드 바로 뒤에 처리 로직을 추가하는 것입니다. 업데이트된 로직이 증가하면 코드 유지 관리가 어려워집니다. 이 방법은 결합되어 있으며 방해가 되므로 새 논리를 추가하려면 이벤트의 기본 코드를 수정해야 합니다.
// 主题接口interface Subject{ public function register(Observer $observer); public function notify();}// 观察者接口interface Observer{ public function watch();}// 主题class Action implements Subject{ public $_observers=[]; public function register(Observer $observer){ $this->_observers[]=$observer; } public function notify(){ foreach ($this->_observers as $observer) { $observer->watch(); } }}// 观察者class Cat1 implements Observer{ public function watch(){ echo "Cat1 watches TV<hr/>"; }} class Dog1 implements Observer{ public function watch(){ echo "Dog1 watches TV<hr/>"; } } class People implements Observer{ public function watch(){ echo "People watches TV<hr/>"; } }// 调用实例$action=new Action();$action->register(new Cat1());$action->register(new People());$action->register(new Dog1());$action->notify();
추천 학습: "PHP 비디오 튜토리얼"
위 내용은 PHP에서 일반적으로 사용되는 6가지 디자인 패턴(요약 공유)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











Alipay PHP ...

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

PHP 개발에서 견고한 원칙의 적용에는 다음이 포함됩니다. 1. 단일 책임 원칙 (SRP) : 각 클래스는 하나의 기능 만 담당합니다. 2. Open and Close Principle (OCP) : 변경은 수정보다는 확장을 통해 달성됩니다. 3. Lisch의 대체 원칙 (LSP) : 서브 클래스는 프로그램 정확도에 영향을 미치지 않고 기본 클래스를 대체 할 수 있습니다. 4. 인터페이스 격리 원리 (ISP) : 의존성 및 사용되지 않은 방법을 피하기 위해 세밀한 인터페이스를 사용하십시오. 5. 의존성 반전 원리 (DIP) : 높고 낮은 수준의 모듈은 추상화에 의존하며 종속성 주입을 통해 구현됩니다.

시스템이 다시 시작된 후 UnixSocket의 권한을 자동으로 설정하는 방법. 시스템이 다시 시작될 때마다 UnixSocket의 권한을 수정하려면 다음 명령을 실행해야합니다.

기사는 PHP 5.3에 도입 된 PHP의 LSB (Late STATIC BING)에 대해 논의하여 정적 방법의 런타임 해상도가보다 유연한 상속을 요구할 수있게한다. LSB의 실제 응용 프로그램 및 잠재적 성능

PHP 개발에서 PHP의 CURL 라이브러리를 사용하여 JSON 데이터를 보내면 종종 외부 API와 상호 작용해야합니다. 일반적인 방법 중 하나는 컬 라이브러리를 사용하여 게시물을 보내는 것입니다 ...

기사는 입력 유효성 검사, 인증 및 정기 업데이트를 포함한 취약점을 방지하기 위해 프레임 워크의 필수 보안 기능을 논의합니다.

phpstorm에서 CLI 모드를 디버그하는 방법은 무엇입니까? PHPStorm으로 개발할 때 때때로 CLI (Command Line Interface) 모드에서 PHP를 디버그해야합니다 ...
