PHP 디자인 패턴 초보자부터 숙련자까지

王林
풀어 주다: 2024-05-07 15:45:02
원래의
1054명이 탐색했습니다.

디자인 패턴은 유지 관리, 확장 및 재사용 가능한 코드를 생성하기 위한 PHP의 입증된 솔루션입니다. 기본 디자인 패턴은 창의적 패턴, 구조적 패턴, 행동 패턴으로 나눌 수 있습니다. 실제 사례에서는 팩토리 패턴을 사용하여 할인 서비스 객체를 생성하고, 프록시 패턴을 사용하여 장바구니에 로깅 기능을 추가하고, 전략 패턴을 통해 다양한 할인 계산을 구현하는 등 장바구니 시스템에 디자인 패턴을 적용하는 방법을 보여줍니다.

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();
로그인 후 복사
🎜🎜전략을 통해 다양한 달성 패턴 할인 계산: 🎜🎜rrreee🎜🎜결론🎜🎜🎜디자인 패턴을 사용하면 우아하고 유연하며 유지 관리가 쉬운 PHP 코드를 만들 수 있습니다. 이 기사에 소개된 기본 디자인 패턴은 광범위한 프로그래밍 문제를 해결하고 고품질 소프트웨어를 구축하는 데 도움이 될 수 있습니다. 🎜

위 내용은 PHP 디자인 패턴 초보자부터 숙련자까지의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿