• 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

<edirlei@iprj.uerj.br>

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

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

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

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

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

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

- 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