>백엔드 개발 >PHP 튜토리얼 >PHP 디자인 패턴 개요

PHP 디자인 패턴 개요

藏色散人
藏色散人앞으로
2019-04-15 09:55:254181검색

디자인 패턴(Design Pattern)

디자인 패턴(Design Pattern)은 대부분의 사람들에게 알려져 있는, 반복적으로 사용되는 코드 디자인 경험을 분류하고 정리한 집합입니다. 디자인 패턴을 사용하는 목적은 코드를 재사용하고, 다른 사람이 코드를 더 쉽게 이해할 수 있도록 하며, 코드 신뢰성을 보장하는 것입니다. 디자인 패턴이 자신과 타인, 그리고 시스템 모두에게 윈윈(win-win)이라는 것은 의심의 여지가 없습니다. 디자인 패턴은 코딩을 진정한 엔지니어링으로 만듭니다. 디자인 패턴은 건물의 구조와 마찬가지로 소프트웨어 엔지니어링의 초석입니다.

왜 디자인 패턴을 옹호해야 할까요?

근본적인 이유는 코드를 재사용하고 유지 관리성을 높이는 것입니다.

그렇다면 코드 재사용을 어떻게 달성할 수 있을까요? 객체 지향 원칙에는 OCP(개방형 폐쇄 원칙), LSP(리스코프 대체 원칙), DIP(종속성 역전 원칙), ISP(인터페이스 분리 원칙), CARP(복합/집합 재사용 원칙), 최소 지식 원칙( PLK(데메테르의 법칙이라고도 함). 열고 닫는 원리는 이상주의적이며 객체 지향 디자인의 궁극적인 목표입니다. 그 밖에도 개폐원리를 구현하는 방법으로 몇 가지 항목을 볼 수 있다.

디자인 패턴은 이러한 원칙을 구현하여 코드 재사용 목적을 달성하고 유지 관리성을 높입니다.

23개 패턴

디자인 패턴은 세 가지 유형으로 나누어 총 23가지 유형이 있습니다.

Abstract Factory(Abstract Factory 패턴): 일련의 관련되거나 상호 의존적인 패턴을 생성하기 위한 인터페이스를 제공합니다. 구체적인 클래스를 지정하지 않고 객체를 사용합니다. Abstract Factory(抽象工厂模式):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

Adapter(适配器模式):将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

Bridge(桥接模式):将抽象部分与它的实现部分分离,使它们都可以独立地变化。

Builder(建造者模式):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

Chain of Responsibility(职责链模式):为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。

Command(命令模式):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。

Composite(组合模式):将对象组合成树形结构以表示“部分-整体”的层次结构。它使得客户对单个对象和复合对象的使用具有一致性。

Decorator(装饰模式):动态地给一个对象添加一些额外的职责。就扩展功能而言, 它比生成子类方式更为灵活。

Facade(外观模式):为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

Factory Method(工厂模式):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method使一个类的实例化延迟到其子类。

Flyweight(享元模式):运用共享技术有效地支持大量细粒度的对象。

Interpreter(解析器模式):给定一个语言, 定义它的文法的一种表示,并定义一个解释器, 该解释器使用该表示来解释语言中的句子。

Iterator(迭代器模式):提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。

Mediator(中介模式):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

Memento(备忘录模式):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。

Observer(观察者模式):定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。

Prototype(原型模式):用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。

Proxy

Adapter (Adapter 패턴): 클래스의 인터페이스를 고객이 원하는 다른 인터페이스로 변환합니다. 어댑터 패턴을 사용하면 호환되지 않는 인터페이스로 인해 함께 작동하지 않는 클래스가 함께 작동할 수 있습니다. 🎜🎜브리지(브리지 모드): 추상 부분을 구현 부분과 분리하여 독립적으로 변경할 수 있습니다. 🎜🎜Builder(빌더 패턴): 복잡한 객체의 구성을 표현과 분리하여 동일한 구성 프로세스가 다른 표현을 만들 수 있습니다. 🎜🎜Chain of Responsibility(Chain of Responsibility 패턴): 요청의 발신자와 수신자를 분리하여 여러 객체가 요청을 처리할 기회를 갖도록 합니다. 이러한 개체는 체인으로 연결되며 요청은 개체가 처리할 때까지 체인을 따라 전달됩니다. 🎜🎜명령(명령 모드): 요청을 객체로 캡슐화하여 다양한 요청으로 클라이언트를 매개변수화할 수 있습니다. 요청을 대기열에 넣거나 기록하고 취소 가능한 작업을 지원할 수 있습니다. 🎜🎜복합(구성 모드): 개체를 트리 구조로 결합하여 "부분-전체" 계층 구조를 나타냅니다. 이를 통해 클라이언트는 단일 개체와 복합 개체를 일관되게 사용할 수 있습니다. 🎜🎜Decorator(장식 모드): 객체에 일부 추가 책임을 동적으로 추가합니다. 확장된 기능 측면에서 서브클래싱보다 더 유연합니다. 🎜🎜Facade(외관 모드): 하위 시스템의 인터페이스 집합에 일관된 인터페이스를 제공합니다. Facade 모드는 상위 수준 인터페이스를 정의하므로 이 하위 시스템을 더 쉽게 사용할 수 있습니다. 🎜🎜팩토리 메서드(팩토리 패턴): 객체 생성을 위한 인터페이스를 정의하고 하위 클래스가 인스턴스화할 클래스를 결정하도록 합니다. 팩토리 메소드는 클래스의 인스턴스화를 하위 클래스로 연기합니다. 🎜🎜플라이웨이트(플라이웨이트 모드): 공유 기술을 사용하여 수많은 세밀한 개체를 효과적으로 지원합니다. 🎜🎜통역사(파서 모드): 언어가 주어지면 문법 표현을 정의하고 해당 표현을 사용하여 언어 문장을 해석하는 통역사를 정의합니다. 🎜🎜Iterator(반복자 패턴): 개체의 내부 표현을 노출하지 않고 집계 개체의 각 요소에 순차적으로 액세스하는 방법을 제공합니다. 🎜🎜조정자(조정 모드): 조정자 개체를 사용하여 일련의 개체 상호 작용을 캡슐화합니다. 중재자는 개체가 서로를 명시적으로 참조할 필요가 없으므로 느슨하게 결합되어 상호 작용을 독립적으로 변경할 수 있습니다. 🎜🎜Memento(메모 모드): 객체의 내부 상태를 캡처하고 캡슐화를 파괴하지 않고 이 상태를 객체 외부에 저장합니다. 이렇게 하면 나중에 개체를 저장된 상태로 복원할 수 있습니다. 🎜🎜Observer(관찰자 패턴): 개체 간의 일대다 종속 관계를 정의하여 개체의 상태가 변경되면 해당 개체에 종속된 모든 개체에 알림이 전송되고 자동으로 새로 고쳐지도록 합니다. 🎜🎜프로토타입(프로토타입 모드): 프로토타입 인스턴스를 사용하여 생성할 객체의 유형을 지정하고, 이 프로토타입을 복사하여 새 객체를 생성합니다. 🎜🎜프록시(프록시 모드): 다른 개체에 대한 프록시를 제공하여 이 개체에 대한 액세스를 제어합니다. 🎜

싱글톤(싱글톤 모드): 클래스에 인스턴스가 하나만 있는지 확인하고 이에 액세스할 수 있는 전역 액세스 지점을 제공합니다. 싱글톤 패턴은 가장 단순한 디자인 패턴 중 하나이지만 Java 개발자에게는 많은 결함이 있습니다. 9월 칼럼에서 David Geary는 싱글톤 패턴과 멀티스레딩, 클래스 로더 및 직렬화에 직면했을 때 싱글턴 패턴의 함정을 처리하는 방법에 대해 논의합니다. Singleton(单例模式):保证一个类仅有一个实例,并提供一个访问它的全局访问点。 单例模式是最简单的设计模式之一,但是对于Java的开发者来说,它却有很多缺陷。在九月的专栏中,David Geary探讨了单例模式以及在面对多线程(multi-threading)、类装载器(class loaders)和序列化(serialization)时如何处理这些缺陷。

State(状态模式):允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。

Strategy(策略模式):定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。

Template Method(模板方法模式):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

Visitor

State(상태 모드): 내부 상태가 변경되면 개체의 동작을 변경할 수 있습니다. 개체가 자신이 속한 클래스를 수정한 것으로 보입니다. 🎜🎜전략(전략 패턴): 일련의 알고리즘을 정의하고 이를 하나씩 캡슐화하고 상호 교환 가능하게 만듭니다. 이 패턴을 사용하면 알고리즘을 사용하는 클라이언트와 독립적으로 알고리즘을 변경할 수 있습니다. 🎜🎜템플릿 메서드(템플릿 메서드 패턴): 작업에서 알고리즘의 골격을 정의하고 일부 단계는 하위 클래스로 연기합니다. 템플릿 방법을 사용하면 하위 클래스가 알고리즘의 구조를 변경하지 않고도 알고리즘의 특정 특정 단계를 재정의할 수 있습니다. 🎜🎜방문자(방문자 모드): 개체 구조의 각 요소에 작용하는 작업을 나타냅니다. 클래스를 변경하지 않고도 각 요소에 대해 작동하는 새로운 작업을 정의할 수 있습니다. 🎜

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

성명:
이 기사는 hcoder.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제