반응형
SMALL

디자인 패턴 28

[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] 명령 패턴(Command Pattern)과 통역 패턴(Interpreter Pattern)

이번 학습 주제는 명령(Command) 패턴과 통역(Interpreter) 패턴입니다 클래스가 일을 실행할 때에는 메소드를 호출합니다 메소드를 호출한 결과는 오브젝트의 상태에 반영되지만 일의 이력은 남지 않습니다 이 때 명령을 표현하는 클래스가 있어서 인스턴스의 집합을 관리한다면 이력을 관리할 수 있습니다 명령 패턴은 이러한 처리를 할 수 있는 패턴입니다 그럼 명령 패턴의 역할들을 정리하고 시작하겠습니다 역할 설명 Command(명령) 명령의 인터페이스를 정의 Concrete Command(구체적 명령) Command 역할의 인터페이스를 실제로 구현 Receiver(수신자) Command 역할이 명령을 실행할 때 대상이 되는 역할 Client(의뢰자) Concrete Command 역할을 생성하고 그 사..

Java 2020.07.24

[Design Pattern] 대리인 패턴(Proxy Pattern)

이번 학습 주제는 대리인(Proxy) 패턴입니다 Proxy는 주로 HTTP Proxy를 떠올리실 것 같네요 아무튼 대리인 패턴은 매우 바쁜 오브젝트 대신에 일을 처리해 줄 수있는 오브젝트가 있는 패턴입니다 물론 처리할 수 있는 일에는 한계가 존재합니다 그럼 대리인 패턴의 역할들을 정리하고 시작하겠습니다 역할 설명 Subject(주체) Proxy 역할과 RealSubject 역할을 동일시하기 위한 인터페이스를 결정 Proxy(대리인) Client 역할의 요구를 할 수 있는 만큼 처리하고 처리할 수 없어 RealSubject 역할이 필요해지면 그 때 RealSubject 역할을 생성 Real Subject(실제의 주체) Proxy 역할에서 감당할 수 없는 일이 발생했을 때 등장 Client(의뢰인) Prox..

Java 2020.07.22
반응형
LIST