Skip to content

Instantly share code, notes, and snippets.

View AlexGalhardo's full-sized avatar
👨‍💻
Always Building, Always Learning

Alex Galhardo AlexGalhardo

👨‍💻
Always Building, Always Learning
View GitHub Profile
  • Change Mode "chmod" command
    Permissão Binário   Octal
    ---        000       0
    --x        001       1
    -w-        010       2
    -wx        011       3
    r--        100       4
    r-x        101       5
    rw-        110       6
    
  • Bridge é um padrão de projeto de software, ou design pattern em inglês, utilizado quando é desejável que uma interface (abstração) possa variar independentemente das suas implementações.
  • Imagine um sistema gráfico de janelas que deve ser portável para diversas plataformas. Neste sistema são encontrados diversos tipos de janelas, como ícones, diálogos, etc. Estas janelas formam uma hierarquia que contém uma abstração das janelas (classe base). Normalmente, a portabilidade seria obtida criando-se especializações dos tipos de janelas para cada uma das plataformas suportadas. O problema com essa solução reside na complexidade da hierarquia gerada e na dependência de plataforma que existirá nos clientes do sistema.
  • Através do padrão Bridge, a hierarquia que define os tipos de janelas é separada da hierarquia que contém a implementação. Desta forma todas as operações de Janela são abstratas e suas implementações são escondidas dos clientes.
  • O diagrama mostra a solução para o problema citado. Temos duas hier
  • Permite a separação da construção de um objeto complexo da sua representação, de forma que o mesmo processo de construção possa criar diferentes representações.
  • contém os seguintes elementos:
    • director — constrói um objeto utilizando a interface do builder;
    • builder — especifica uma interface para um construtor de partes do objeto-produto;
    • concrete builder — define uma implementação da interface builder, mantém a representação que cria e fornece interface para recuperação do produto;
    • product — o objeto complexo acabado de construir. Inclui classes que definem as partes constituintes.
  • Vantagens
    • Permite variar a representação interna de um produto;
    • Encapsula o código entre construção e representação;
  • Provê controle durante o processo de construção.
  • Principal função é evitar a dependência entre um objeto receptor e um objeto solicitante. Consiste em uma série de objetos receptores e de objetos de solicitação, onde cada objetos de solicitação possui uma lógica interna que separa quais são tipos de objetos receptores que podem ser manipulados. O restante é passado para o próximo objetos de solicitação da cadeia.

  • Devido à isso, é um padrão que utiliza a ideia de baixo acoplamento por permitir que outros objetos da cadeia tenham a oportunidade de tratar uma solicitação.

  • Situações de Uso

    • Mais de um objeto pode tratar uma solicitação e o objeto que a tratará não é conhecido a priori;
    • O objeto que trata a solicitação deve ser escolhido automaticamente;
    • Deve-se emitir uma solicitação para um dentre vários objetos, sem especificar explicitamente o receptor;
    • O conjunto de objetos que pode tratar uma solicitação deveria ser especificado dinamicamente.
  • Em um sistema orientado a objetos esses interagem entre si através de mensagens, e

  • Utilizado quando é necessário manter baixo o nível de acoplamento entre diferentes módulos de um sistema.
  • Nesta solução as dependências entre os módulos não são definidas programaticamente, mas sim pela configuração de uma infraestrutura de software (container) que é responsável por "injetar" em cada componente suas dependências declaradas.
  • A Injeção de dependência se relaciona com o padrão Inversão de controle mas não pode ser considerada um sinônimo deste.
  • Alguns dos frameworks mais utilizados que fazem uso de injeção de dependência são o Spring, o Laravel e o AngularJS.
<?php

class YouTube implements VideoServiceInterface {
  • Pode ser chamado de policy.

  • Este padrão foi documentado no Catálogo GOF (Gang of Four), sendo categorizado como um padrão comportamental de desenvolvimento de software.

  • De modo que delega as responsabilidades adquiridas pelas entidades, atribuindo, portanto, o comportamento.

  • Assim a comunicação entre os objetos é aprimorada, pois há a distribuição das responsabilidades.

  • O objetivo é representar uma operação a ser realizada sobre os elementos de uma estrutura de objetos. O padrão Strategy permite definir novas operações sem alterar as classes dos elementos sobre os quais opera.

  • Segundo o catálogo GOF o padrão tem como meta: "Definir uma família de algoritmos, encapsular cada uma delas e torná-las intercambiáveis.

  • Strategy permite que o algoritmo varie independentemente dos clientes que o utilizam."

  • O padrão tem como habilidade:

  • Define uma família de algoritmos;

<?php

final class StaticFactory {

	public static function make($type) {
		if($type == 'number'){
			return new FormatNumber();
		}
  • Este padrão garante a existência de apenas uma instância de uma classe, mantendo um ponto global de acesso ao seu objeto.

  • Nota linguística: O termo vem do significado em inglês para um conjunto (entidade matemática) que contenha apenas um elemento.

  • Alguns projetos necessitam que algumas classes tenham apenas uma instância.

  • Por exemplo, em uma aplicação que precisa de uma infraestrutura de log de dados, pode-se implementar uma classe no padrão singleton.

  • Desta forma existe apenas um objeto responsável pelo log em toda a aplicação que é acessível unicamente através da classe singleton.

  • Onde Usar

  • Quando você necessita de somente uma instância da classe, por exemplo, a conexão com banco de dados, vamos supor que você terá que chamar diversas vezes a conexão com o banco de dados em um código na mesma execução, se você instanciar toda vez a classe de banco, haverá grande perda de desempenho, assim usando o padrão singleton, é garantida que nesta execução será instânciada a classe somente uma vez

  • Permite às classes delegar para subclasses decidirem, isso é feito através da criação de objetos que chamam o método fabrica especificado numa interface e implementado por um classe filha ou implementado numa classe abstrata e opcionalmente sobrescrito por classes derivadas.

  • Estrutura

  • O padrão Factory Method, da forma como foi descrito no livro Design Patterns: Elements of Reusable Object-Oriented Software, contém os seguintes elementos:

    • Creator(Criador abstrato) — declara o factory method (método de fabricação) que retorna o objeto da classe Product (produto). Este elemento também pode definir uma implementação básica que retorna um objeto de uma classe ConcreteProduct (produto concreto) básica;
    • ConcreteCreator(Criador concreto) — sobrescreve o factory method e retorna um objeto da classe ConcreteProduct;
    • Product(Produto abstrato) — define uma interface para os objectos criados pelo factory method;
    • ConcreteProduct(Produto concreto) — uma implementação para a interface Product.
  • Objeto de acesso a dados (acrônimo do inglês Data Access Object - DAO)

  • É um padrão para aplicações que utilizam persistência de dados, onde tem a separaração das regras de negócio das regras de acesso a banco de dados, implementada com linguagens de programação orientadas a objetos (como por exemplo Java) e arquitetura MVC, onde todas as funcionalidades de bancos de dados, tais como obter conexões, mapear objetos para tipos de dados SQL ou executar comandos SQL, devem ser feitas por classes DAO.

  • Vantagens

    • A vantagem de usar objetos de acesso a dados é a separação simples e rigorosa entre duas partes importantes de uma aplicação que não devem e não podem conhecer quase que nada uma da outra, e que podem evoluir frequentemente e independentemente.
    • Alterar a lógica de negócio podem esperar apenas a implementação de uma interface, enquanto que modificações na lógica de persistência não alteram a lógica de negócio, desde que a interface entre elas não seja modificada.
  • Pode ser usada em uma vas