• Nenhum resultado encontrado

Análise e Projeto Orientados por Objetos

N/A
N/A
Protected

Academic year: 2021

Share "Análise e Projeto Orientados por Objetos"

Copied!
23
0
0

Texto

(1)

Análise e Projeto Orientados

por Objetos

Edirlei Soares de Lima

<[email protected]>

Aula 06 – Padrões GoF (Factory Method e

Abstract Factory)

(2)

Padrões GoF

• Criação:

– Abstract Factory

– Builder

– Factory Method

– Prototype

– Singleton

• Estruturais:

– Adapter

– Bridge

– Composite

– Decorator

– Façade

– Flyweight

– Proxy

• Comportamentais:

– Chain of Responsibility

– Command

– Interpreter

– Iterator

– Mediator

– Memento

– Observer

– State

– Strategy

– Template Method

– Visitor

(3)

Factory Method

• Intenção: definir uma interface para criação de um objeto,

permitindo que as suas subclasses decidam qual classe

instanciar. O Factory Method deixa a responsabilidade de

instanciação para as subclasses.

• Aplicabilidade:

– Classe não conhece antecipadamente a classe dos objetos que deve

criar;

(4)
(5)
(6)

Factory Method – Implementação

public interface Shape {

void draw(); }

public class Rectangle implements Shape {

@Override

public void draw() {

System.out.println("Inside Rectangle::draw() method."); }

(7)

Factory Method – Implementação

public class Square implements Shape {

@Override

public void draw() {

System.out.println("Inside Square::draw() method."); }

}

public class Circle implements Shape {

@Override

public void draw() {

System.out.println("Inside Circle::draw() method."); }

(8)

Factory Method – Implementação

public class ShapeFactory {

public Shape getShape(String shapeType) //factory method {

if(shapeType == null) return null;

if(shapeType.equalsIgnoreCase("CIRCLE")) return new Circle();

else if(shapeType.equalsIgnoreCase("RECTANGLE")) return new Rectangle();

else if(shapeType.equalsIgnoreCase("SQUARE")) return new Square();

return null; }

(9)

Factory Method – Implementação

public static void main(String[] args) {

ShapeFactory shapeFactory = new ShapeFactory();

Shape shape1 = shapeFactory.getShape("CIRCLE"); shape1.draw();

Shape shape2 = shapeFactory.getShape("RECTANGLE"); shape2.draw();

Shape shape3 = shapeFactory.getShape("SQUARE"); shape3.draw();

(10)

Abstract Factory

• Intenção: fornecer uma interface comum para a

criação de famílias de objetos relacionados ou

dependentes sem especificar suas classes concretas.

• Solução: crie uma interface para representar uma

fábrica para cada família de objetos. As subclasses

concretas instanciam cada família específica.

– Baseia-se no uso de uma super-fábrica, responsavel por

criar outras fábricas.

(11)
(12)
(13)

Abstract Factory – Implementação

public interface Shape {

void draw(); }

public class Rectangle implements Shape {

@Override

public void draw() {

System.out.println("Inside Rectangle::draw() method."); }

(14)

Abstract Factory – Implementação

public class Square implements Shape {

@Override

public void draw() {

System.out.println("Inside Square::draw() method."); }

}

public class Circle implements Shape {

@Override

public void draw() {

System.out.println("Inside Circle::draw() method."); }

(15)

Abstract Factory – Implementação

public interface Color {

void fill(); }

public class Red implements Color {

@Override

public void fill() {

System.out.println("Inside Red::fill() method."); }

(16)

Abstract Factory – Implementação

public class Green implements Color {

@Override

public void fill() {

System.out.println("Inside Green::fill() method."); }

}

public class Blue implements Color {

@Override

public void fill() {

System.out.println("Inside Blue::fill() method."); }

(17)

Abstract Factory – Implementação

public abstract class AbstractFactory {

abstract Color getColor(String color); abstract Shape getShape(String shape); }

(18)

Abstract Factory – Implementação

public class ShapeFactory extends AbstractFactory {

@Override

public Shape getShape(String shapeType) {

if(shapeType == null)

return null;

if(shapeType.equalsIgnoreCase("CIRCLE")) return new Circle();

else if(shapeType.equalsIgnoreCase("RECTANGLE")) return new Rectangle();

else if(shapeType.equalsIgnoreCase("SQUARE")) return new Square();

return null; }

@Override

Color getColor(String color){ return null;

} }

(19)

Abstract Factory – Implementação

public class ColorFactory extends AbstractFactory {

@Override

public Shape getShape(String shapeType){ return null;

}

@Override

Color getColor(String color) {

if(color == null) return null;

if(color.equalsIgnoreCase("RED")) return new Red();

else if(color.equalsIgnoreCase("GREEN")) return new Green();

else if(color.equalsIgnoreCase("BLUE")) return new Blue();

return null; }

(20)

Abstract Factory – Implementação

public class FactoryProducer {

public static AbstractFactory getFactory(String choice) {

if(choice.equalsIgnoreCase("SHAPE")) return new ShapeFactory(); else if(choice.equalsIgnoreCase("COLOR")) return new ColorFactory();

return null; }

(21)

Abstract Factory – Implementação

public static void main(String[] args) {

AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE"); Shape shape1 = shapeFactory.getShape("CIRCLE");

shape1.draw();

Shape shape2 = shapeFactory.getShape("RECTANGLE"); shape2.draw();

Shape shape3 = shapeFactory.getShape("SQUARE"); shape3.draw();

AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR"); Color color1 = colorFactory.getColor("RED");

color1.fill();

Color color2 = colorFactory.getColor("Green"); color2.fill();

Color color3 = colorFactory.getColor("BLUE"); color3.fill();

(22)

Abstract Factory – Aplicabilidade

• Quando o sistema deve ser independente de como seus

produtos são criados, compostos e representados.

• Quando o sistema deve ser configurado com uma dentre

várias famílias de produtos.

– É necessário fornecer uma biblioteca de classes, mas não é desejável

revelar que produto particular está sendo usado.

• Quando uma família de produtos relacionados foi projetada

para ser usada em conjunto, e esta restrição tem de ser

(23)

Abstract Factory – Consequências

• Isola classes concretas: uma vez que uma fábrica encapsula a

responsabilidade e o processo de criação de objetos-produto,

ela isola clientes das classes de implementação.

• Fica mais fácil a troca de uma família de produtos, bastando

trocar a fábrica concreta usada pela aplicação.

Referências

Documentos relacionados

O maior sucesso no emprego da vibroestimulação peniana para colheita de sêmen de macacos de cheiro parece depender de ajustes nas técnicas de contenção e

Dessa maneira, para sensibilizar os alunos sobre a necessidade de refletir acerca dos resultados das ações humanas, que são nocivas ao meio ambiente, foi proposto no projeto

Como se pode perceber, as narrativas dos entrevistados indicam que um conjunto de fatores concorre para que a realização de práticas sexuais indesejadas e a utilização

O atleta expulso não poderá retornar a partida, e sua equipe permanecerá dois minutos, ou até a equipe adversária realizar um tempo, com

Apenas foram submetidos aos protocolos de provocação e/ou dessensibilização com AAS, os pacientes com asma controlada e, portanto, os pacientes que tinham asma grave não

- foram negativos para flagelados. Contudo, nenhum caso humano foi ain· da descrito, embora Ferraroni et a/. Esse município é importante pelo seu comércio

Fica a Cooperativa Acordante autorizada a descontar de seus empregados, em folha de pagamento e/ou na rescisão do contrato de trabalho, os valores relativos a empréstimos

As quatro professoras participantes da pesquisa têm curso de pós-graduação (três com doutorado e uma com mestrado) e atuam na instituição há mais de 18 anos. Todas atuaram