디자인 패턴은 유지 관리, 확장 및 재사용 가능한 코드를 생성하기 위한 PHP의 입증된 솔루션입니다. 기본 디자인 패턴은 창의적 패턴, 구조적 패턴, 행동 패턴으로 나눌 수 있습니다. 실제 사례에서는 팩토리 패턴을 사용하여 할인 서비스 객체를 생성하고, 프록시 패턴을 사용하여 장바구니에 로깅 기능을 추가하고, 전략 패턴을 통해 다양한 할인 계산을 구현하는 등 장바구니 시스템에 디자인 패턴을 적용하는 방법을 보여줍니다.
PHP 디자인 패턴: 초보자부터 숙련까지
소개
디자인 패턴은 일반적인 프로그래밍 문제를 해결하기 위한 입증된 코딩 솔루션입니다. PHP에서 디자인 패턴은 유지 관리, 확장 및 재사용 가능한 코드를 작성하는 데 도움이 됩니다.
기본 디자인 패턴
창의적인 패턴: 객체 생성을 위한 메커니즘을 제공합니다.
구조적 패턴: 클래스와 객체 간의 관계를 정의합니다.
행동 패턴: 객체가 통신하고 협력하는 방식을 정의합니다.
실용 사례: 장바구니
다음 클래스가 포함된 장바구니 시스템을 생각해 보세요.
Cart
: 구매한 품목을 저장하는 장바구니를 나타냅니다. Cart
:表示购物车,存储购买的物品。Item
:表示购物车中的单个物品。DiscountService
:提供计算折扣的接口。使用工厂模式创建 DiscountService
对象:
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(); } }
使用代理模式为 Cart
항목
: 장바구니에 있는 단일 항목을 나타냅니다.
DiscountService
: 할인 계산을 위한 인터페이스를 제공합니다.
팩토리 패턴을 사용하여 DiscountService
객체 생성:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!