Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,4 +161,9 @@ Este projeto é de código aberto e está disponível para fins educacionais.
Feel free to contribute by adding more design patterns, improving existing implementations, or adding new language translations!

[pt-br]
Sinta-se à vontade para contribuir adicionando mais padrões de projeto, melhorando implementações existentes ou adicionando novas traduções de idiomas!

Sinta-se à vontade para contribuir adicionando mais padrões de projeto, melhorando implementações existentes ou adicionando novas traduções de idiomas!

## FOSSA License

[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fluizwbr%2Fdesign-patterns-examples.svg?type=large&issueType=license)](https://app.fossa.io/projects/git%2Bgithub.com%2Fluizwbr%2Fdesign-patterns-examples?ref=badge_large&issueType=license)
35 changes: 3 additions & 32 deletions patterns/abstract-factory/README.en.md
Original file line number Diff line number Diff line change
@@ -1,36 +1,7 @@
# Abstract Factory Pattern - Angular 2+
# Abstract Factory Pattern

This example demonstrates the Abstract Factory pattern in Angular 2+ using a GUI factory that creates UI elements for different operating systems.
This example demonstrates the Abstract Factory pattern using a GUI factory that creates UI elements for different operating systems.

## Description

The Abstract Factory pattern provides an interface for creating families of related objects without specifying their concrete classes. In this example, we create UI elements (buttons and checkboxes) for different operating systems (Windows and Mac).

## Files

- `gui-factory.service.ts` - Service containing the factory interfaces and implementations
- `abstract-factory.component.ts` - Component that uses the factory service
- `abstract-factory.component.html` - Template for the component
- `abstract-factory.component.css` - Styles for the component

## Usage

```typescript
import { Component } from '@angular/core';
import { AbstractFactoryComponent } from './abstract-factory/angular2/abstract-factory.component';

@Component({
selector: 'app-root',
standalone: true,
imports: [AbstractFactoryComponent],
template: '<app-abstract-factory></app-abstract-factory>'
})
export class AppComponent {}
```

## How It Works

1. `GUIFactory` is the abstract factory interface that defines methods to create related products
2. `WindowsFactory` and `MacFactory` are concrete factories that implement the interface
3. Each factory creates a family of related products (Button and Checkbox) specific to an OS
4. The component uses the factory service to create UI elements without knowing their concrete classes
The Abstract Factory pattern provides an interface for creating families of related objects without specifying their concrete classes. In this example, we create UI elements (buttons and checkboxes) for different operating systems (Windows and Mac).
34 changes: 2 additions & 32 deletions patterns/abstract-factory/README.pt-br.md
Original file line number Diff line number Diff line change
@@ -1,37 +1,7 @@
# Padrão Abstract Factory - Angular 2+
# Padrão Abstract Factory

Este exemplo demonstra o padrão Abstract Factory em Angular 2+ usando uma fábrica de elementos de interface gráfica.
Este exemplo demonstra o padrão Abstract Factory usando uma fábrica de elementos de interface gráfica.

## Descrição

O padrão Abstract Factory fornece uma interface para criar famílias de objetos relacionados sem especificar suas classes concretas. Neste exemplo, criamos elementos de UI (Botão, Checkbox) para diferentes sistemas operacionais (Windows, Mac) sem que o código cliente conheça as classes específicas.

## Arquivos

- `gui-factory.service.ts` - Serviço contendo a fábrica abstrata e as implementações concretas
- `abstract-factory.component.ts` - Componente que usa o serviço de fábrica
- `abstract-factory.component.html` - Template do componente
- `abstract-factory.component.css` - Estilos do componente

## Uso

```typescript
import { Component } from '@angular/core';
import { AbstractFactoryComponent } from './abstract-factory/angular2/abstract-factory.component';

@Component({
selector: 'app-root',
standalone: true,
imports: [AbstractFactoryComponent],
template: '<app-abstract-factory></app-abstract-factory>'
})
export class AppComponent {}
```

## Como Funciona

1. `GUIFactory` é a interface da fábrica abstrata
2. `WindowsFactory` e `MacFactory` são fábricas concretas
3. `Button` e `Checkbox` são interfaces de produtos abstratos
4. Produtos concretos implementam interfaces específicas do SO
5. O componente usa a fábrica sem conhecer as implementações específicas
18 changes: 2 additions & 16 deletions patterns/adapter/README.en.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,7 @@
# Adapter Pattern - Angular 2+
# Adapter Pattern

This example demonstrates the Adapter pattern in Angular 2+ using a media player that can play different file formats.
This example demonstrates the Adapter pattern using a media player that can play different file formats.

## Description

The Adapter pattern allows incompatible interfaces to work together. In this example, we have an `AudioPlayer` that natively plays MP3 files but can use adapters to play VLC and MP4 files through their specific players.

## Files

- `media-adapter.ts` - Adapter classes for different media formats
- `adapter.component.ts` - Component that uses the adapter
- `adapter.component.html` - Template for the component
- `adapter.component.css` - Styles for the component

## How It Works

1. `MediaPlayer` is the target interface
2. `Mp3Player`, `VlcPlayer`, `Mp4Player` are adaptees with different interfaces
3. `MediaAdapter` adapts VLC and MP4 players to the MediaPlayer interface
4. `AudioPlayer` uses the adapter to play different formats
33 changes: 2 additions & 31 deletions patterns/adapter/README.pt-br.md
Original file line number Diff line number Diff line change
@@ -1,36 +1,7 @@
# Padrão Adapter - Angular 2+
# Padrão Adapter

Este exemplo demonstra o padrão Adapter em Angular 2+ usando um reprodutor de mídia.
Este exemplo demonstra o padrão Adapter usando um reprodutor de mídia.

## Descrição

O padrão Adapter permite que interfaces incompatíveis trabalhem juntas. Neste exemplo, o `MediaAdapter` permite que um reprodutor de áudio reproduza diferentes formatos de arquivo (MP3, VLC, MP4) através de uma interface comum.

## Arquivos

- `media-player.service.ts` - Serviço contendo o adaptador e as implementações de reprodutores
- `adapter.component.ts` - Componente que usa o serviço de reprodutor
- `adapter.component.html` - Template do componente
- `adapter.component.css` - Estilos do componente

## Uso

```typescript
import { Component } from '@angular/core';
import { AdapterComponent } from './adapter/angular2/adapter.component';

@Component({
selector: 'app-root',
standalone: true,
imports: [AdapterComponent],
template: '<app-adapter></app-adapter>'
})
export class AppComponent {}
```

## Como Funciona

1. `MediaPlayer` é a interface alvo que o cliente usa
2. `AdvancedMediaPlayer` é a interface existente que precisa ser adaptada
3. `MediaAdapter` adapta a interface avançada para a interface padrão
4. O componente usa o reprodutor através da interface comum sem conhecer os detalhes de implementação
18 changes: 2 additions & 16 deletions patterns/bridge/README.en.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,7 @@
# Bridge Pattern - Angular 2+
# Bridge Pattern

This example demonstrates the Bridge pattern in Angular 2+ using shapes and colors.
This example demonstrates the Bridge pattern using shapes and colors.

## Description

The Bridge pattern decouples an abstraction from its implementation so that the two can vary independently. In this example, shapes (Circle, Square, Triangle) are decoupled from colors (Red, Blue, Green).

## Files

- `shape-bridge.ts` - Bridge pattern implementation with shapes and colors
- `bridge.component.ts` - Component that demonstrates the pattern
- `bridge.component.html` - Template for the component
- `bridge.component.css` - Styles for the component

## How It Works

1. `Color` is the implementation interface
2. `RedColor`, `BlueColor`, `GreenColor` are concrete implementations
3. `Shape` is the abstraction that uses a Color implementation
4. `Circle`, `Square`, `Triangle` are refined abstractions
34 changes: 2 additions & 32 deletions patterns/bridge/README.pt-br.md
Original file line number Diff line number Diff line change
@@ -1,37 +1,7 @@
# Padrão Bridge - Angular 2+
# Padrão Bridge

Este exemplo demonstra o padrão Bridge em Angular 2+ usando formas e cores.
Este exemplo demonstra o padrão Bridge usando formas e cores.

## Descrição

O padrão Bridge separa a abstração de um objeto de sua implementação para que ambos possam variar independentemente. Neste exemplo, formas (Círculo, Quadrado) podem ter diferentes cores (Vermelho, Azul) sem criar uma classe para cada combinação.

## Arquivos

- `shape-color.service.ts` - Serviço contendo as interfaces de forma e cor
- `bridge.component.ts` - Componente que usa formas coloridas
- `bridge.component.html` - Template do componente
- `bridge.component.css` - Estilos do componente

## Uso

```typescript
import { Component } from '@angular/core';
import { BridgeComponent } from './bridge/angular2/bridge.component';

@Component({
selector: 'app-root',
standalone: true,
imports: [BridgeComponent],
template: '<app-bridge></app-bridge>'
})
export class AppComponent {}
```

## Como Funciona

1. `Color` é a interface de implementação
2. `RedColor` e `BlueColor` são implementações concretas de cor
3. `Shape` é a abstração que contém uma referência para `Color`
4. `Circle` e `Square` são abstrações refinadas
5. Formas e cores podem variar independentemente
20 changes: 3 additions & 17 deletions patterns/builder/README.en.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,7 @@
# Builder Pattern - Angular 2+
# Builder Pattern

This example demonstrates the Builder pattern in Angular 2+ using a house construction example.
This example demonstrates the Builder pattern using a house construction example.

## Description

The Builder pattern separates the construction of a complex object from its representation, allowing the same construction process to create different representations. In this example, we build houses with different configurations step by step.

## Files

- `house-builder.ts` - Builder classes for constructing houses
- `builder.component.ts` - Component that uses the builder
- `builder.component.html` - Template for the component
- `builder.component.css` - Styles for the component

## How It Works

1. `House` is the complex object being built
2. `HouseBuilder` provides methods to build each part of the house
3. `HouseDirector` orchestrates the building process for predefined configurations
4. The component can use the director for standard builds or the builder directly for custom builds
The Builder pattern separates the construction of a complex object from its representation, allowing the same construction process to create different representations. In this example, we build houses with different configurations step by step.
34 changes: 2 additions & 32 deletions patterns/builder/README.pt-br.md
Original file line number Diff line number Diff line change
@@ -1,37 +1,7 @@
# Padrão Builder - Angular 2+
# Padrão Builder

Este exemplo demonstra o padrão Builder em Angular 2+ usando a construção de uma casa.
Este exemplo demonstra o padrão Builder usando construção de uma casa.

## Descrição

O padrão Builder separa a construção de um objeto complexo de sua representação. Neste exemplo, o `HouseBuilder` constrói uma casa passo a passo, definindo fundação, estrutura, telhado e interior.

## Arquivos

- `house-builder.service.ts` - Serviço contendo o builder e a classe House
- `builder.component.ts` - Componente que usa o builder
- `builder.component.html` - Template do componente
- `builder.component.css` - Estilos do componente

## Uso

```typescript
import { Component } from '@angular/core';
import { BuilderComponent } from './builder/angular2/builder.component';

@Component({
selector: 'app-root',
standalone: true,
imports: [BuilderComponent],
template: '<app-builder></app-builder>'
})
export class AppComponent {}
```

## Como Funciona

1. `House` é o produto complexo sendo construído
2. `HouseBuilder` fornece métodos para construir cada parte da casa
3. O builder permite a construção passo a passo
4. O método `build()` retorna o produto final
5. O componente usa o builder para criar casas com diferentes configurações
7 changes: 6 additions & 1 deletion patterns/chain-of-responsibility/README.en.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
# Chain of Responsibility Pattern - Angular 2+
# Chain of Responsibility Pattern

Demonstrates the Chain of Responsibility pattern using a support ticket system.

## Description

The Chain of Responsibility pattern allows an object to pass a request along a chain of potential handlers until one of them handles the request. In this example, support tickets are processed by different support levels (Level 1, Level 2, Level 3) based on their severity.

33 changes: 2 additions & 31 deletions patterns/chain-of-responsibility/README.pt-br.md
Original file line number Diff line number Diff line change
@@ -1,37 +1,8 @@
# Padrão Chain of Responsibility - Angular 2+
# Padrão Chain of Responsibility

Este exemplo demonstra o padrão Chain of Responsibility em Angular 2+ usando um sistema de tickets de suporte.
Este exemplo demonstra o padrão Chain of Responsibility usando um sistema de tickets de suporte.

## Descrição

O padrão Chain of Responsibility passa solicitações ao longo de uma cadeia de manipuladores. Neste exemplo, tickets de suporte são processados por diferentes níveis de suporte (Básico, Técnico, Gerente) dependendo de sua complexidade.

## Arquivos

- `support-handler.service.ts` - Serviço contendo a cadeia de manipuladores
- `chain-of-responsibility.component.ts` - Componente que usa a cadeia
- `chain-of-responsibility.component.html` - Template do componente
- `chain-of-responsibility.component.css` - Estilos do componente

## Uso

```typescript
import { Component } from '@angular/core';
import { ChainOfResponsibilityComponent } from './chain-of-responsibility/angular2/chain-of-responsibility.component';

@Component({
selector: 'app-root',
standalone: true,
imports: [ChainOfResponsibilityComponent],
template: '<app-chain-of-responsibility></app-chain-of-responsibility>'
})
export class AppComponent {}
```

## Como Funciona

1. `SupportHandler` é a interface base do manipulador
2. Manipuladores concretos (Basic, Technical, Manager) processam solicitações
3. Cada manipulador pode processar a solicitação ou passá-la adiante
4. A cadeia é configurada conectando os manipuladores
5. O componente envia solicitações para o primeiro manipulador da cadeia
4 changes: 2 additions & 2 deletions patterns/command/README.en.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Command Pattern - Angular 2+
# Command Pattern

This example demonstrates the Command pattern in Angular 2+ using a remote control for a light.
This example demonstrates the Command pattern using a remote control for a light.

## Description

Expand Down
34 changes: 2 additions & 32 deletions patterns/command/README.pt-br.md
Original file line number Diff line number Diff line change
@@ -1,37 +1,7 @@
# Padrão Command - Angular 2+
# Padrão Command

Este exemplo demonstra o padrão Command em Angular 2+ usando um controle remoto.
Este exemplo demonstra o padrão Command usando um controle remoto.

## Descrição

O padrão Command encapsula uma solicitação como um objeto. Neste exemplo, um controle remoto executa comandos (Ligar, Desligar) em diferentes dispositivos sem conhecer os detalhes de implementação dos dispositivos.

## Arquivos

- `remote-control.service.ts` - Serviço contendo comandos e dispositivos
- `command.component.ts` - Componente que usa o controle remoto
- `command.component.html` - Template do componente
- `command.component.css` - Estilos do componente

## Uso

```typescript
import { Component } from '@angular/core';
import { CommandComponent } from './command/angular2/command.component';

@Component({
selector: 'app-root',
standalone: true,
imports: [CommandComponent],
template: '<app-command></app-command>'
})
export class AppComponent {}
```

## Como Funciona

1. `Command` é a interface que todos os comandos concretos implementam
2. Comandos concretos (OnCommand, OffCommand) encapsulam ações
3. `RemoteControl` é o invocador que executa comandos
4. Os dispositivos são os receptores que executam as ações reais
5. O componente configura e executa comandos através do controle remoto
Loading
Loading