반응형
SMALL

Design Pattern 13

[Design Pattern] 미래(Future), 파이프라인(Pipeline), 워커 풀(Worker Pool) 패턴

미래(Future) 미래 디자인 패턴은 결국 동일한 고루틴 또는 다른 고루틴에 의해 실행될 알고리즘을 작성할 수 있게 해줍니다. package future type SuccessFunc func(string) type FailFunc func(error) type ExecuteStringFunc func() (string, error) type MaybeString struct { successFunc SuccessFunc failFunc FailFunc } func (s *MaybeString) Success(f SuccessFunc) *MaybeString { s.successFunc = f return s } func (s *MaybeString) Fail(f FailFunc) *MaybeStrin..

Go 2022.12.01

[Design Pattern] 중재인(Mediator), 관찰자(Observer), 장벽(Barrier) 패턴

중재인(Mediator) 중재인 디자인 패턴은 이름에서 알 수 있듯이, 정보를 교환하기 위해 두 가지 유형 사이에 있는 패턴입니다. package main import "fmt" type One struct{} type Two struct{} type Three struct{} type Four struct{} func Sum(a, b interface{}) interface{} { switch a := a.(type) { case One: switch b := b.(type) { case One: return &Two{} case Two: return &Three{} case int: return b + 1 default: return fmt.Errorf("number not found") } case..

Go 2022.11.30

[Design Pattern] 인터프리터(Interpreter), 방문자(Visitor), 상태(State) 패턴

인터프리터(Interpreter) 인터프리터 디자인 패턴은 실제로 인터프리터 패턴은 일반적인 작업을 수행하기 위한 언어를 갖는 것이 유용한 비즈니스 사례를 해결하는 데 널리 사용됩니다. package interpreter import ( "strconv" "strings" ) const ( SUM = "sum" SUB = "sub" MUL = "mul" DIV = "div" ) type polishNotationStack []int func (p *polishNotationStack) Push(s int) { *p = append(*p, s) } func (p *polishNotationStack) Pop() int { length := len(*p) if length > 0 { temp := (*p)[..

Go 2022.11.30

[Design Pattern] 커맨드(Command), 템플릿(Template), 메멘토(Memento) 패턴

커맨드(Command) 커맨드(Command) 디자인 패턴은 전략 설계 패턴과 매우 유사하지만 주요 차이점이 있습니다. 전략 패턴에서는 알고리즘 변경에 초점을 맞추는 반면, 커맨드 패턴에서는 무언가의 호출 또는 어떤 유형의 추상화에 초점을 맞춥니다. package main import "fmt" type Command interface { Execute() } type ConsoleOutput struct { message string } func (c *ConsoleOutput) Execute() { fmt.Println(c.message) } func CreateCommand(s string) Command { fmt.Println("Creating command") return &ConsoleOut..

Go 2022.11.29

[Design Pattern] 플라이웨이트(Flyweight), 전략(Strategy), 역할 사슬(Chain of Responsibility) 패턴

플라이웨이트(Flyweight) 플라이웨이트 디자인 패턴은 특정 유형의 여러 인스턴스 간에 무거운 개체의 상태를 공유할 수 있는 패턴입니다. package flyweight import "time" const ( TEAM_A = iota TEAM_B ) type Team struct { ID uint64 Name int Shield []byte Players []Player HistoricalData []HistoricalData } type Player struct { Name string Surname string PreviousTeam uint64 Photo []byte } type HistoricalData struct { Year uint8 LeagueResults []Match } type M..

Go 2022.11.25

[Design Pattern] 프록시(Proxy), 데코레이터(Decorator), 퍼사드(Facade)

프록시(Proxy) 프록시 패턴은 일반적으로 개체의 특성을 숨기기 위해 개체를 감쌉니다. 이러한 특성은 원격 개체(원격 프록시), 매우 큰 이미지 또는 테라바이트 데이터베이스 덤프(가상 프록시)와 같은 매우 무거운 개체 또는 제한된 액세스 개체(보호 프록시)일 수 있습니다. package proxy import "fmt" type User struct { ID int32 } type UserList []User func (t *UserList) FindUser(id int32) (User, error) { for i := 0; i < len(*t); i++ { if (*t)[i].ID == id { return (*t)[i], nil } } return User{}, fmt.Errorf("user %d ..

Go 2022.11.24

[Design Pattern] 합성(Composite), 어댑터(Adapter), 브릿지(Bridge) 패턴

합성(Composite) 합성 디자인 패턴은 상속(관계)보다 구성(일반적으로 a가 관계를 갖는 것으로 정의됨)을 선호합니다. 합성 디자인 패턴에서 객체의 계층 및 트리를 작성합니다. 개체 내부에 고유한 필드와 메서드가 있는 개체가 서로 다릅니다. 이 접근 방식은 매우 강력하며 상속 및 다중 상속의 많은 문제를 해결합니다. package main import "fmt" type Athlete struct{} func (a *Athlete) Train() { fmt.Println("Training") } type Animal struct{} func (a *Animal) Eat() { fmt.Println("Eating") } type Shark struct { Animal Swim func() } type..

Go 2022.11.23

[Design Pattern] 추상 팩토리(Abstract Factory), 프로토타입(Prototype) 패턴

추상 팩토리(Abstract Factory) 추상 팩토리 디자인 패턴은 인터페이스를 통해 사용되는 더 큰(그리고 더 복잡한) 복합 객체를 달성하기 위한 새로운 그룹화 계층입니다. 패밀리에 객체를 그룹화하고 패밀리를 그룹화하는 아이디어는 서로 교환할 수 있고 더 쉽게 성장할 수 있는 대규모 공장을 갖는 것입니다. 개발 초기 단계에서는 코드를 시작하기 위해 모든 구체적인 구현이 완료될 때까지 기다리는 것보다 공장 및 추상 공장과 함께 작업하는 것이 더 쉽습니다. 또한 특정 필드에 대한 개체의 인벤토리가 매우 크고 쉽게 패밀리로 그룹화될 수 있다는 것을 알지 못하는 한 처음부터 추상 팩토리를 작성하지 않습니다. 개체 수가 너무 증가하여 개체 수를 모두 얻기 위해 고유한 점을 만드는 것이 유일한 방법일 때 관련..

Go 2022.11.23

[Design Pattern] 싱글톤(Singleton), 빌더(Builder), 팩토리 메소드(Factory Method) 패턴

싱글톤(Singleton) 싱글톤(Singleton) 패턴은 기억하기 쉬운 패턴입니다. 이름에서도 나타내듯이 한 객체 대한 중복 없이 하나의 인스턴스를 제공하는 디자인 패턴입니다. 이는 인스턴스를 사용하기 위한 첫번째 호출에서 인스턴스를 생성하고 애플리케이션 내에서 재사용되는 것을 의미합니다. 이를 돕기 위해 간단하게 count를 증가시키는 코드를 살펴보겠습니다. package singleton type Singleton interface { AddOne() int } type singleton struct { count int } var instance *singleton func GetInstance() Singleton { if instance == nil { instance = new(single..

Go 2022.11.21

[Design Pattern] 빌더 패턴(Builder Pattern)

어느 덧 6월도 중순이 되었습니다 시간이 무섭도록 빠르다고 느껴지는데요 시간이 더 흐르기 전에 하나라도 더 학습해야겠습니다 지난 시간에 이어 디자인 패턴 중 빌더 패턴(Builder Pattern)에 대해 학습하겠습니다 빌더 패턴은 구조를 가진 인스턴스를 쌓아 올린다는 의미인데요 아래는 빌더 패턴을 구성하는 역할들을 정리한 것입니다 역할 설명 건축가(Builder) 인스턴스를 생성하기 위한 인터페이스를 결정 구체적인 건축가(Concrete Builder) Builder 역할의 인터페이스를 구현 감독자(Director) Builder 역할의 인터페이스를 사용해서 인스턴스를 생성 의뢰인(Client) Builder 패턴을 이용하는 역할 매번 하는 소리지만 글만으로 느낌을 알 수 없네요-_- 그럼 역시 구현을..

Java 2020.06.15
반응형
LIST