PHP 설계 모드 - 공장 모드의 단순한 공장 모드
정의:
단순 공장 모델: 호출자와 창설자를 분리하여 결합을 실현하고 호출자는 직접 공장에 요청한다. 공장을 통해 실례화가 필요한 대상을 선택하고 하나의 단독 클래스로 이 창설 실례를 만드는 과정을 한다.
코드 인스턴스:
문제: 개인 사무 관리에 관한 프로젝트에 여러 가지 유형의 대상이 있는데 그 중 하나가 Appointment 대상이라고 가정하면 지금은 BlogggsCal이라는 형식을 통해 예약 데이터의 상호작용을 해야 한다.MegaCal 형식과 같은 더 많은 데이터 형식을 처리해야 할 수도 있습니다.
1. 추상 클래스 ApptEncoder 만들기
/**
*
* Class ApptEncoder
*/
abstract class ApptEncoder
{
abstract public function encode();
}
2. BloggsCal 형식 처리 클래스 만들기
/**
* BloggsCal
* Class BloggsApptEncoder
*/
class BloggsApptEncoder extends ApptEncoder
{
public function encode()
{
// TODO: Implement encode() method.
return "Appointment data encoded in BloggsCal format
";
}
}
3. MegaCal 형식 처리 클래스 만들기
/**
* MegaCal
* Class MegaApptEncoder
*/
class MegaApptEncoder extends ApptEncoder
{
public function encode()
{
// TODO: Implement encode() method.
return "Appointment data encoded in MegaCal format
";
}
}
4, 플랜트 클래스 CommsManager 생성
/**
*
* Class CommsManager
*/
class CommsManager
{
const BLOGGS = 1;
const MEGA = 2;
private $model;
/**
* CommsManager constructor.
* @param $model
*/
public function __construct($model)
{
$this->model = $model;
}
/**
*
*/
public function getApptEncoder()
{
switch ($this->model) {
case (self::BLOGGS):
return new BloggsApptEncoder();
default:
return new MegaApptEncoder();
}
}
}
5. 호출:
$man = new CommsManager(CommsManager::BLOGGS);
print $man->getApptEncoder()->encode();
$man = new CommsManager(CommsManager::MEGA);
print $man->getApptEncoder()->encode();
6. 결과:
Appointment data encoded in BloggsCal format
Appointment data encoded in MegaCal format
만약에 뒤에 포맷 처리가 필요하다면 상응하는 포맷 처리 클래스를 추가하고 공장 클래스에 상응하는 실례화 호출을 추가하면 된다.
요약:
단순 공장 모델의 가장 큰 장점은 공장 유형에 필요한 논리적 판단을 포함하고 클라이언트의 선택 조건에 따라 동적 실례화와 관련된 클래스는 클라이언트에게 구체적인 제품과의 의존을 제거한다.하지만 아까도 말했듯이 포맷 처리를 추가하면 공장류를 수정해야 한다.확장뿐만 아니라 수정에도 개방돼 개방-폐쇄원칙에 어긋난다는 뜻이다.이때 공장 방법 모드를 사용할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.