>백엔드 개발 >PHP 튜토리얼 >PHP 객체 지향 고급 디자인 패턴: 팩토리 패턴 사용 예

PHP 객체 지향 고급 디자인 패턴: 팩토리 패턴 사용 예

巴扎黑
巴扎黑원래의
2017-05-22 14:06:181651검색

객체 지향 프로그램에서 본 것 중 가장 큰 switch/case 문에는 20개 이상의 조건이 있었습니다. 런타임 중에 이 코드 모듈은 매번 모든 조건을 실행합니다. 각 조건은 애플리케이션 API의 외부 사용과 통신하는 데 사용되는 새 객체를 생성하는 역할을 합니다. 그 중 하나에 대한 몇 가지 일반적인 문제 해결을 수행한 후 애플리케이션에 의해 구현된 인터페이스를 살펴보기 시작했습니다. 놀랍게도 switch/case 문에서 참조되는 모든 클래스는 동일한 인터페이스를 구현하고 있습니다! 나중에 switch/case 문에 새 조건문을 추가할 때 대신 팩토리 패턴을 사용하는 것이 좋습니다.

팩토리 패턴이란?

팩토리 디자인 패턴은 호출 코드가 기본 클래스를 실제로 인스턴스화하는 단계를 결정하지 않도록 하면서 개체의 새 인스턴스를 얻기 위한 인터페이스를 제공합니다.

PHP가 언어로 발전하고 발전함에 따라 PHP의 기능은 입증된 디자인 패턴의 적용을 통해 계속해서 간단한 개발 수단을 제공합니다. PHP의 특히 유용한 기능은 변수 내용을 기반으로 클래스의 새 인스턴스를 생성하는 기능입니다. 이 객체 인스턴스화의 동적 방법은 PHP에서 Factory 디자인 패턴을 구현하기 위한 코드 블록 구축 접근 방식입니다.

팩토리 디자인 패턴을 기반으로 하는 클래스는 기본 코드 흐름에서 조건 기반 복잡성을 줄이는 데 도움이 됩니다. 애플리케이션 전체에서 객체는 다양한 방식으로 호출됩니다. 객체 생성과 관련된 모든 수정 사항은 나머지 애플리케이션에 영향을 미칩니다. 일부 기능을 완료하기 위해 5개 개체 중 하나를 인스턴스화한다고 가정해 보겠습니다. 인스턴스화할 개체를 결정하기 위해 조건문을 만드는 것도 한 가지 접근 방식입니다. 조건문은 복잡한 if/else 문이나 switch/case 문일 수 있습니다. 이 기능은 애플리케이션의 여러 위치에서 사용될 수 있지만 중복된 코드가 발생합니다. 다음으로 여섯 번째 개체가 추가되거나 기존 개체 5개 중 하나의 이름이 변경되면 프로그램 코드의 모든 인스턴스를 수정하고 다시 테스트해야 합니다. 팩토리 디자인 패턴은 위의 객체를 생성하기 위한 간단한 인터페이스를 제공함으로써 이러한 골칫거리를 피하는 데 도움이 됩니다. 객체가 수정되거나 다른 객체가 추가되더라도 Factory 객체는 여전히 동일한 방식으로 호출됩니다. 블로그 항목을 표시하는 것은 표시의 한 예입니다.

팩토리 디자인 패턴을 사용하는 목적은 다양한 객체를 생성하는 것만이 아닙니다. Factory 디자인 패턴을 기반으로 하는 클래스의 또 다른 사용 사례는 항목 컬렉션으로 작업할 때입니다. 이 경우 개체 컬렉션에는 동일한 기본 개체가 포함되어 있지만 각 개체의 특성은 다릅니다.

생성할 개체 유형을 결정하는 데 여러 단계가 필요한 경우 팩토리 디자인 패턴을 기반으로 하는 클래스를 사용하여 새 인스턴스를 검색하는 것이 더 좋습니다.

UML

이 UML 다이어그램은 팩토리 디자인 패턴을 사용한 클래스 디자인을 자세히 설명합니다.

PHP 객체 지향 고급 디자인 패턴: 팩토리 패턴 사용 예

다음은 위 그림에 대한 설명입니다.

1. 기존 기본 클래스 두 개는 MyObjectTyepA와 MyObjectTyepB입니다. 두 광산 모두 고유한 방식으로 객체별 논리를 수행하는 doSomething()이라는 공개 메서드를 가지고 있습니다. 두 기본 클래스의 공용 인터페이스와 반환 유형은 완전히 동일합니다.

2. MyObjectFactory 클래스는 위 기본 클래스의 인스턴스를 생성하고 이를 코드 흐름에 반환하는 데 사용됩니다. 여기에는 생성해야 하는 기본 클래스의 인스턴스를 결정하는 데 도움이 되는 매개 변수 유형을 허용하는 createObject()라는 공용 메서드가 있습니다. 이어서 createObject() 메서드는 요청된 유형 클래스의 인스턴스를 반환합니다.

PHP 디자인 패턴 팩토리 패턴 사용예

<?php
/*
* 每日练习 PHP设计模式工厂模式的使用方法
* PHP工厂模式不难理解,顾名思义,就是一个加工厂,然后工厂是制造产品的,只要制造产品
* 就必须有几个要素:"方法","模型","工厂车间"。
*/
/*第一种示例 普通工厂模式
* */
abstract class model {//产品模型
abstract function getNames();
}
class zhangsan extends model {//产品实例
function getNames(){
return "my name is zhengsan";
}
}
class lisi extends model{//产品实例
function getNames(){
return "my name is lisi";
}
}
abstract class gongchangModel {//工厂模型
abstract function getZhangsan();
abstract function getLisi();
}
class gongchang extends gongchangModel{//工厂实例
function getZhangsan(){
return new zhangsan();
}
function getLisi(){
return new lisi();
}
}
$gongchang=new gongchang();//实例化工厂
$zhangsan=$gongchang->getZhangsan();//制造产品
echo $zhangsan->getNames();//产品输出功能
?>

사실 팩토리 패턴에는 일반 팩토리 패턴과 추상 팩토리 패턴이 포함되어 있습니다. , 관계없이 모든 팩토리 패턴에는 객체를 생성하는 하나의 기능이 있습니다.

좋아, 아래의 가장 간단한 예를 사용하여 PHP 디자인 패턴의 팩토리 패턴을 보여드리겠습니다.

공장 모델의 3가지 요소를 정리해보았습니다.

1. 제품 모델

2. 제품 예시

3. 으아아아

위 내용은 PHP 객체 지향 고급 디자인 패턴: 팩토리 패턴 사용 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.