Design patterns
가장 유명한 디자인 패턴으로는 GoF Design pattern이 있다. 하도 유명해서 필수로 알아두면 좋을 패턴들은 다음과 같다.
- Relational diagram
Creational patterns
Abstract factory pattern
groups object factories that have a common theme.Builder pattern
constructs complex objects by separating construction and representation.- ex) Car builder
Factory method pattern
creates objects without specifying the exact class to create.Prototype pattern
creates objects by cloning an existing object.Singleton pattern
restricts object creation for a class to only one instance.
Structural patterns
Adapter
allows classes with incompatible interfaces to work together by wrapping its own interface around that of an already existing class.- ex) wrapper function / Delegation
Bridge
decouples an abstraction from its implementation so that the two can vary independently.Composite
composes zero-or-more similar objects so that they can be manipulated as one object.Decorator
dynamically adds/overrides behavior in an existing method of an object.- ex) Windowing system
Facade
provides a simplified interface to a large body of code.- ex) API
Flyweight
reduces the cost of creating and manipulating a large number of similar objects.Proxy
provides a placeholder for another object to control access, reduce cost, and reduce complexity.
Behavioral patterns
Chain of responsibility
delegates commands to a chain of processing objects.Command
creates objects which encapsulate actions and parameters.Interpreter
implements a specialized language.
Iterator accesses the elements of an object sequentially without exposing its underlying representation.Mediator
allows loose coupling between classes by being the only class that has detailed knowledge of their methods.Memento
provides the ability to restore an object to its previous state (undo).Observer
is a publish/subscribe pattern which allows a number of observer objects to see an event.- ex) MVC : java.swing / [c#]winform
State
allows an object to alter its behavior when its internal state changes.Strategy
allows one of a family of algorithms to be selected on-the-fly at runtime.Template
method defines the skeleton of an algorithm as an abstract class, allowing its subclasses to provide concrete behavior.Visitor
separates an algorithm from an object structure by moving the hierarchy of methods into one object.
etc
Factory Pattern vs Builder patterns
굉장히 비슷한 기능적인 설계 구조를 가지고 있는 두 가지 패턴이다. 둘 다 정형화된 class를 만드는 interface를 abstraction 시키는 데 매우 편리하게 사용되는 패턴이다. 다른 점이 있다면 만드는 product의 개수가 일반적으로 Factory는 n개, Builder는 1개로 한다는 점이다.Factory Pattern의 경우 n개의 method가 products의 각각 다른 리턴타입을 가질 수 있게 설계하는 것이 보통이다. 하지만, Builder의 경우에는 보통 1개의 method, construct() 만이 product를 리턴할 수 있게 설계하는 것이 일반적인 차이이다.
Builder focuses on constructing a complex object step by step. Abstract Factory emphasizes a family of product objects (either simple or complex). Builder returns the product as a final step, but as far as the Abstract Factory is concerned, the product gets returned immediately.
-
MVC : Model, View, Controller의 앞글자를 딴 것을 의미며, 어플리케이션의 역할을 세 가지로 구분한 개발 방법론이다.
핵심은 사용자가 직접 Model을 만지지 않도록 하는 구조
라고 볼 수 있다. 아래처럼 사용자가 Controller를 조작하면, Controller가 Model을 통해서 데이터를 가져오고 그 정보를 바탕으로 View를 통해서 사용자에게 정보를 제공하는 구조이다.추가로 비슷한 디자인 패턴 구조로는 MVP (Model, View, Presenter), MVVM (Model, View, View Model)가 있다. 두 모델은 View와 Model을 분리해 주는 장점을 가지고 있다. MVVM에서는 View가 보는 Data는 Model의 원래 정보가 아닌 View Model을 통해 간접적으로 얻는 Data이며, event를 통해서 view model의 변화를 Control하는 특징이 있다.
GoF 패턴의 Observer 패턴과 연관성이 매우 크다. 객체의 상태변화, event, call-back function 등의 특성이 observer 패턴의 핵심 구성요소이기 때문이다.
useful links
Design pattern examples from non-program