Um pattern em C# por dia - Bridge - pattern estrutural

Agnaldo define e dá exemplos de uso do pattern estrutural Bridge

originalmente publicado em http://50minutos.com.br/blog

Definição:

É um padrão que nos permite separar a implementação da abstração.

Quando usar:

Como usar:

Exemplo 01:

using System; namespace _50minutos_bridge { class Program { static void Main(string[] args) { CalculadoraFramework cf; cf = new CalculadoraFramework(); CalculadoraJohnWallis jw; jw = new CalculadoraJohnWallis(); CalculadoraLeibniz lz; lz = new CalculadoraLeibniz(); Console.WriteLine("constante do framework"); Console.WriteLine("\tPI: \n", new Calculadora(cf).PI); Console.WriteLine("algoritmo de John Wallis"); Console.WriteLine("\tPI: \n", new Calculadora(jw).PI); Console.WriteLine("algoritmo de Leibniz"); Console.WriteLine("\tPI: \n", new Calculadora(lz).PI); Console.ReadKey(); } } //Bridge interface ICalculadora { //OperationImp double PI { get; } } //ImplementationA class CalculadoraFramework : ICalculadora { //retorna a constante PI da classe Math //OperationImp public double PI { get { return Math.PI; } } } //ImplementationB class CalculadoraJohnWallis : ICalculadora { //OperationImp public double PI { get { double pi = 1; for (int i = 1; i <= 100000; i++) { double numero = i * 2; pi *= numero / (numero - 1); pi *= numero / (numero + 1); } return 2 * pi; } } } //ImplementationX class CalculadoraLeibniz : ICalculadora { //OperationImp public double PI { get { double pi = 0; for (int i = 1; i <= 400000; i += 4) { pi = pi + 1.0 / i - 1.0 / (i + 2); } return 4 * pi; } } } //Abstraction class Calculadora { //bridge ICalculadora c; public Calculadora(ICalculadora c) { this.c = c; } //Operation public double PI { get { return c.PI; } } } }

Exemplo 02:

using System; namespace _50minutos_bridge { class Program { static void Main(string[] args) { //usando Generic Console.WriteLine("constante do framework"); Console.WriteLine("\tPI: \n", new Calculadora().PI); Console.WriteLine("algoritmo de John Wallis"); Console.WriteLine("\tPI: \n", new Calculadora().PI); Console.WriteLine("algoritmo de Leibniz"); Console.WriteLine("\tPI: \n", new Calculadora().PI); Console.ReadKey(); } } //Bridge interface ICalculadora { //OperationImp double PI { get; } } //ImplementationA class CalculadoraFramework : ICalculadora { //retorna a constante PI da classe Math //OperationImp public double PI { get { return Math.PI; } } } //ImplementationB class CalculadoraJohnWallis : ICalculadora { //OperationImp public double PI { get { double pi = 1; for (int i = 1; i <= 100000; i++) { double numero = i * 2; pi *= numero / (numero - 1); pi *= numero / (numero + 1); } return 2 * pi; } } } //ImplementationX class CalculadoraLeibniz : ICalculadora { //OperationImp public double PI { get { double pi = 0; for (int i = 1; i <= 400000; i += 4) { pi = pi + 1.0 / i - 1.0 / (i + 2); } return 4 * pi; } } } //Abstraction usando Generic class Calculadora where T: ICalculadora, new() { //Operation public double PI { get { //bridge >>> new T() return new T().PI; } } } }
Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados