이 기사에서는 PHP 디자인 패턴의 간단한 팩토리 패턴을 안내합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.
간단한 팩토리부터 시작해보세요. 인터뷰든, 다른 사람의 인터뷰든, 디자인 패턴에 대해 물으면 대부분의 사람들은 팩토리 패턴을 언급합니다. 디자인 패턴 중 여러 가지 공장 관련 패턴이 가장 유명하고 널리 사용된다는 것은 의심의 여지가 없습니다. GoF 디자인 패턴은 창조적인 패턴이기도 합니다.
그러나 Simple Factory, Factory Pattern, Abstract Factory Pattern 세 가지 모드를 명확하게 설명할 수 있는 사람은 면접관에게 좋은 인상을 줄 수 있습니다. 여기에는 나를 포함한 대부분의 사람들이 디자인 패턴을 깊이 연구하기 전에는 명확하게 설명할 수 없다는 전제가 있습니다. 내가 인터뷰하러 가는 것인지, 다른 사람을 인터뷰하는 것인지. 다른 사람을 인터뷰할 때는 대략적인 개요만 제시할 수 있습니다. 면접에 갔을 때 대략적인 개요만 말씀드렸습니다. 많은 시행착오를 겪은 끝에 디자인 패턴을 심도 있게 연구하자는 생각이 떠올라서 이 시리즈를 제작하게 되었습니다. 이 간단한 팩토리에서 시작하여 디자인 패턴을 다시 깊이 연구해 봅시다.
정적 팩토리라고도 불리는 단순 팩토리는 GoF 23개 디자인 패턴에 속하지 않습니다. 하지만 모든 디자인 패턴 중에서 아마도 모든 사람이 가장 이해하기 쉽다고 할 수 있으며, 이미 이 디자인 패턴을 코드에서 수없이 사용해 본 적이 있을 것입니다. 가장 간단한 코드 세그먼트부터 시작해 보겠습니다.
// Factory class Factory { public static function createProduct(string $type) : Product { $product = null; switch ($type) { case 'A': $product = new ProductA(); break; case 'B': $product = new ProductB(); break; } return $product; } }
네, 핵심은 중간에 있는 간단한 스위치 코드입니다. 제품 인터페이스 구현으로 반환 값 유형을 수정했습니다.
이 코드에서는 새로운 PHP 기능인 매개변수 유형과 반환값 유형
제품 인터페이스 및 제품 구현
// Products interface Product { public function show(); } class ProductA implements Product { public function show() { echo 'Show ProductA'; } } class ProductB implements Product { public function show() { echo 'Show ProductB'; } }
결국 클라이언트 사용이 매우 간단해졌습니다
// Client $productA = Factory::createProduct('A'); $productB = Factory::createProduct('B'); $productA->show(); $productB->show();
From 위 코드는 보시다시피 실제로 우리가 전달한 문자열이나 정의한 다른 식별자를 기반으로 해당 제품(제품 개체)을 반환하는 팩토리 클래스입니다.
좀 더 시각적으로 표현하자면 저는 휴대폰을 판매하는 도매업자(클라이언트, 비즈니스 측)입니다. 휴대폰(제품)이 필요해서 Foxconn(공장)에 생산을 도와달라고 요청했습니다. 주문($type 변수)을 하고 모델을 지정했는데 폭스콘에서 해당 모델의 휴대폰을 주시고 계속해서 작업을 해주셔서 정말 즐거웠습니다.
여기서 작성하는 보다 표준화된 방법은 모든 제품이 통합 인터페이스를 구현하고 클라이언트는 인터페이스 메서드를 균일하게 호출하는 방법만 알 수 있다는 것입니다. 표준화되지 않으면 통일된 Facade 관리를 위한 Facade 모드와 유사하게 인터페이스를 사용할 수 없고 다양한 객체를 반환할 수 없습니다.
소스 코드 주소: Simple Factory 기본 클래스 다이어그램 구현
https://github.com/zhangyue0503/designpatterns-php/blob/master/01.simple-factory/source/simple-factory.php
시나리오: SMS 전송 기능 모듈. 이제 우리는 Alibaba Cloud, Diexin 및 Jiguang이라는 3개의 판매자의 SMS 서비스를 사용합니다. Simple Factory를 사용하면 다양한 SMS 발신자를 쉽게 충족할 수 있습니다.
클래스 다이어그램:
코드:
<?php interface Message { public function send(string $msg); } class AliYunMessage implements Message{ public function send(string $msg){ // 调用接口,发送短信 // xxxxx return '阿里云短信(原阿里大鱼)发送成功!短信内容:' . $msg; } } class BaiduYunMessage implements Message{ public function send(string $msg){ // 调用接口,发送短信 // xxxxx return '百度SMS短信发送成功!短信内容:' . $msg; } } class JiguangMessage implements Message{ public function send(string $msg){ // 调用接口,发送短信 // xxxxx return '极光短信发送成功!短信内容:' . $msg; } } Class MessageFactory { public static function createFactory($type){ switch($type){ case 'Ali': return new AliYunMessage(); case 'BD': return new BaiduYunMessage(); case 'JG': return new JiguangMessage(); default: return null; } } } // 当前业务需要使用极光 $message = MessageFactory::createMessage('Ali'); echo $message->send('您有新的短消息,请查收');
소스 코드 주소: Simple Factory 인스턴스-SMS 전송 공장
https://github.com/zhangyue0503/designpatterns-php/blob/master / 01.simple-factory/source/simple-factory-message.php
Description
위 내용은 PHP의 간단한 팩토리 패턴에 대한 간략한 토론의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!