Patrón de fábrica simple a partir del patrón de diseño.

Prefacio

El patrón de fábrica simple no es uno de los 23 patrones de diseño de GoF, pero generalmente se usa como punto de partida para aprender patrones de diseño. En el patrón de fábrica simple, puede devolver instancias de diferentes clases de acuerdo con diferentes parámetros. El patrón de fábrica simple define específicamente una clase para que sea responsable de crear instancias de otras clases. Esta clase se denomina clase de fábrica. Las instancias creadas generalmente tienen un clase parental común.

1. Modelo de fábrica simple

Patrón de fábrica simple (Patrón de fábrica simple), también conocido como Patrón de método de fábrica estático (Patrón de método de fábrica estático), pertenece al patrón de creación de clases.
Definición : Defina una clase y devuelva diferentes instancias de clase de acuerdo con diferentes parámetros Estas clases tienen clases padre públicas y algunos métodos públicos. El patrón de fábrica simple no pertenece al patrón de diseño de GoF, es el patrón de fábrica más simple.
Frecuencia de uso :
diagrama de estructura de modelo de fábrica simple de 4 estrellas :
Inserte la descripción de la imagen aquí
Ventajas :
1. La clase de fábrica contiene los juicios lógicos necesarios, que pueden determinar cuándo crear una instancia de qué producto. El cliente puede quedar exento de la responsabilidad de crear directamente los objetos del producto, y es muy conveniente crear los productos correspondientes. Se distinguen claramente las responsabilidades de las fábricas y los productos.
2. El cliente no necesita conocer el nombre de la clase del producto específico creado, solo los parámetros.
3. También es posible introducir archivos de configuración para reemplazar y agregar nuevas categorías de productos específicas sin modificar el código del cliente.
Desventajas :
1. El modelo de fábrica simple tiene un solo tipo de fábrica y es responsable de la creación de todos los productos. Las responsabilidades son demasiado pesadas. Una vez anormal, todo el sistema se verá afectado. Y el código de fábrica estará muy inflado, lo que viola el principio de alta agregación.
2. El uso del modelo de fábrica simple aumentará el número de clases en el sistema (introduciendo nuevas clases de fábrica), aumentará la complejidad del sistema y la dificultad de comprensión
3. Es difícil expandir el sistema. Una vez que se agrega un nuevo producto , la lógica de fábrica tiene que ser modificada. Durante mucho tiempo, la lógica puede ser demasiado complicada.
4. El modelo de fábrica simple utiliza el método de fábrica estático, lo que hace que el rol de fábrica no forme una estructura jerárquica basada en la herencia.
Escenarios de aplicación :
Para relativamente pocos tipos de productos, considere usar un modelo de fábrica simple. Los clientes que usan el patrón de fábrica simple solo necesitan pasar los parámetros de la clase de fábrica, no necesitan preocuparse por la lógica de cómo crear el objeto y pueden crear fácilmente los productos requeridos.

2. Fábrica gráfica de ejemplo de patrón de fábrica simple

1. Descripción de ejemplo

Utilice el patrón de fábrica simple para diseñar una clase de herramienta de dibujo que pueda crear diferentes formas geométricas (Shape), como objetos Circle, Rectangle y Triangle. Cada figura geométrica tiene dibujar y borrar Los dos métodos de borrado requieren que se lance una UnsupportedShapeException al dibujar figuras geométricas no compatibles, dibuje el diagrama de clases e impleméntelo mediante programación.

2. Diagrama de clases de instancia

Inserte la descripción de la imagen aquí

3. Código de ejemplo

En este ejemplo, Shape actúa como un producto abstracto, sus subclases Circle, Rectangle y Triangle actúan como productos concretos y ShapeFactory es una clase 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 prueba del 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());
		}
	}
}

Los resultados de la operación son los siguientes:

绘制矩形
删除矩形

referencias

[1] Modo de fábrica simple
[2] Curso de capacitación en modo de diseño (segunda edición) Tsinghua University Press, editado por Liu Wei

Supongo que te gusta

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