Padrão de fábrica simples a partir do padrão de design

Prefácio

O padrão de fábrica simples não é um dos 23 padrões de projeto GoF, mas geralmente é usado como o ponto de partida para aprender padrões de projeto. No padrão de fábrica simples, você pode retornar instâncias de classes diferentes de acordo com parâmetros diferentes. O padrão de fábrica simples define especificamente uma classe para ser responsável pela criação de instâncias de outras classes. Essa classe é chamada de classe de fábrica. As instâncias criadas geralmente têm um classe pai comum.

1. Modelo de fábrica simples

O Simple Factory Pattern (Simple Factory Pattern), também conhecido como Static Factory Method Pattern (Static Factory Method Pattern), pertence ao padrão de criação de classe.
Definição : Definir uma classe e retornar diferentes instâncias de classe de acordo com diferentes parâmetros.Essas classes têm classes públicas pai e alguns métodos públicos. O padrão de fábrica simples não pertence ao padrão de design GoF, é o padrão de fábrica mais simples.
Frequência de uso :
Diagrama de estrutura do modelo de fábrica simples de 4 estrelas :
Insira a descrição da imagem aqui
Vantagens :
1. A classe de fábrica contém os julgamentos lógicos necessários, que podem determinar quando criar uma instância de qual produto. O cliente pode ficar isento da responsabilidade de criar objetos de produto diretamente, e é muito conveniente criar produtos correspondentes. As responsabilidades das fábricas e dos produtos são claramente diferenciadas.
2. O cliente não precisa saber o nome da classe do produto específico criado, apenas os parâmetros.
3. Também é possível introduzir arquivos de configuração para substituir e adicionar novas categorias específicas de produtos sem modificar o código do cliente.
Desvantagens :
1. O modelo de fábrica simples possui um único tipo de fábrica e é responsável pela criação de todos os produtos. As responsabilidades são muito pesadas. Uma vez anormais, todo o sistema será afetado. E o código de fábrica ficará muito inchado, o que viola o princípio de alta agregação.
2. Usar o modelo de fábrica simples aumentará o número de classes no sistema (introduzindo novas classes de fábrica), aumentará a complexidade do sistema e a dificuldade de compreensão
3. É difícil expandir o sistema. Uma vez que um novo produto é adicionado , a lógica de fábrica deve ser modificada. Por um longo tempo, a lógica pode ser muito complicada.
4. O modelo de fábrica simples usa o método de fábrica estático, fazendo com que a função de fábrica falhe em formar uma estrutura hierárquica baseada na herança.
Cenários de aplicação :
Para relativamente poucos tipos de produtos, considere o uso de um modelo de fábrica simples. Os clientes que usam o padrão de fábrica simples precisam apenas passar os parâmetros da classe de fábrica, não precisam se preocupar com a lógica de como criar o objeto e podem criar facilmente os produtos necessários.

2. Fábrica gráfica de exemplo de padrão de fábrica simples

1. Descrição de exemplo

Use o padrão de fábrica simples para projetar uma classe de ferramenta de desenho que pode criar diferentes formas geométricas (Forma), como objetos Círculo, Retângulo e Triângulo. Cada figura geométrica desenha e apaga Os dois métodos de apagar exigem que uma UnsupportedShapeException seja lançada ao desenhar figuras geométricas não suportadas, desenhe o diagrama de classe e implemente-o programaticamente.

2. Diagrama de classe de instância

Insira a descrição da imagem aqui

3. Código de exemplo

Neste exemplo, Shape atua como um produto abstrato, suas subclasses Circle, Rectangle e Triangle atuam como produtos concretos e ShapeFactory é uma classe de fábrica.

//形状接口:抽象产品
interface Shape
{
    
    
	public void draw();
	public void erase();
}

//圆形类:具体产品
class Circle implements Shape
{
    
    
	public void draw()
	{
    
    
		System.out.println("绘制圆形");
	}
	public void earse()
	{
    
    
		System.out.println("删除圆形");
	}
}
//矩形类:具体产品
class Rectangle implements Shape
{
    
    
	public void draw()
	{
    
    
		System.out.println("绘制矩形");
	}
	public void earse()
	{
    
    
		System.out.println("删除矩形");
	}
}
//三角形类:具体产品
class Triangle implements Shape
{
    
    
	public void draw()
	{
    
    
		System.out.println("绘制三角形");
	}
	public void earse()
	{
    
    
		System.out.println("删除三角形");
	}
}

//形状工厂类:工厂
class ShapeFactory
{
    
    
	//静态工厂方法
	public static Shape createShape(String type)throws UnsupportedShapeException
	{
    
    
		if(type.equalsIgnoreCase("c")
		{
    
    
			return new Circle();
		}
		else if(type.equalsIgnoreCase("r")
		{
    
    
			return new Rectangle();
		} 
		else if(type.equalsIgnoreCase("t")
		{
    
    
			return new Triangle();
		}
		else
		{
    
    
			throw new UnsupportedShapeException("不支持该形状!");
		}
	}
}
//自定义异常类
class UnsupportedShapeException extends Exception
{
    
    
	public UnsupportedShapeException(String message)
	{
    
    
		super(message);
	}
}

Código de teste do cliente:

class Client
{
    
    
	public static vodi main(String[] args)
	{
    
    
		try
		{
    
    
			Shape shape;
			shape = ShapeFactory.createShape("r");
			shape.draw();
			shape.erase();
		}
		catch(UnsupportedShapeException e)
		{
    
    
			System.out.println(e.getMessage());
		}
	}
}

Os resultados da operação são os seguintes:

绘制矩形
删除矩形

referências

[1] Modo de fábrica simples
[2] Curso de treinamento em modo de design (2ª edição) Tsinghua University Press, editado por Liu Wei

Acho que você gosta

Origin blog.csdn.net/weixin_43594279/article/details/114919377
Recomendado
Clasificación