설계 패턴은 소프트웨어 개발에서 널리 입증 된 솔루션으로 유지 관리 가능하고 확장 가능하며 재사용 가능한 코드 구조를 구축 할 수 있습니다. PHP에 설계 패턴을 적용하면 코드 품질을 향상시킬뿐만 아니라 복잡한 비즈니스 요구에 직면 할 때 시스템을보다 유연하게 만듭니다.
설계 패턴은 일반적으로 생성 유형, 구조 유형 및 행동 유형의 세 가지 범주로 나뉩니다. 각 카테고리마다 초점과 사용 시나리오가 다릅니다.
크리에이티브 모드는 객체의 생성 프로세스를 캡슐화하여 특정 클래스에서 코드를 분리하는 데 사용됩니다. 일반적인 창조 패턴에는 다음이 포함됩니다.
구조 패턴은 클래스와 객체의 조합에 중점을 두어 시스템을보다 유연하고 유지 관리하기 쉽도록 목표로합니다. 일반적인 구조 패턴은 다음과 같습니다.
행동 모드는 객체 간의 의사 소통 방법과 책임을 설명하는 데 사용됩니다. 주요 모드는 다음과 같습니다.
다음 예제는 공장 패턴, 에이전트 패턴 및 정책 패턴을 포함하여 쇼핑 카트 시스템에서 설계 패턴의 실제 적용을 보여줍니다.
interface DiscountServiceFactory {
public static function create(): DiscountService;
}
class NormalDiscountService implements DiscountService {
// ...
}
class PremiumDiscountService implements DiscountService {
// ...
}
class DiscountServiceFactoryImpl implements DiscountServiceFactory {
public static function create(): DiscountService {
if (isPremiumCustomer()) {
return new PremiumDiscountService();
}
return new NormalDiscountService();
}
}
공장 모델을 통해 특정 클래스에 직접 의존하지 않고 사용자 유형을 기반으로 다양한 할인 서비스 인스턴스를 유연하게 생성 할 수 있습니다.
class CartLoggerProxy extends Cart {
private $logger;
public function __construct(Cart $cart, Logger $logger) {
parent::__construct();
$this->cart = $cart;
$this->logger = $logger;
}
public function addItem(Item $item): void {
parent::addItem($item);
$this->logger->log("Added item to cart");
}
// 다른 방법도 비슷하게 확장할 수 있습니다.
}
프록시 모드는 로깅 또는 권한 제어 추가와 같은 중간 계층 (프록시)을 통해 원래 클래스의 기능을 향상시킵니다.
interface DiscountStrategy {
public function calculateDiscount(Cart $cart): float;
}
class NoDiscountStrategy implements DiscountStrategy {
public function calculateDiscount(Cart $cart): float {
return 0;
}
}
class FlatDiscountStrategy implements DiscountStrategy {
private $discount;
public function __construct(float $discount) {
$this->discount = $discount;
}
public function calculateDiscount(Cart $cart): float {
return $cart->getTotal() * $this->discount;
}
}
// 전략 적용
$context = new DiscountContext();
if (isPremiumCustomer()) {
$context->setStrategy(new PremiumDiscountStrategy());
} else {
$context->setStrategy(new NoDiscountStrategy());
}
$discount = $context->calculateDiscount();
전략 모델을 사용하면 다양한 할인 알고리즘을 자유롭게 전환 할 수 있으므로 시스템의 유연성과 확장 성이 향상됩니다.
디자인 패턴은 프로그래밍 기술 일뿐 만 아니라 일종의 아이디어이기도합니다. 공장, 에이전트 및 전략 모델을 합리적으로 적용함으로써 PHP 프로젝트 구조를 더 명확하고 유연하게 만들고 복잡한 시나리오에서 우수한 유지 관리를 유지할 수 있습니다. 이러한 패턴을 마스터하면 PHP 개발 여정을위한 탄탄한 토대가 될 것입니다.