Modo de fábrica simple de patrones de diseño: el proceso de realización de fábrica simple

Patrón de fábrica simple (también llamado patrón de método de fábrica estático)

Método de
fábrica patrón patrón de fábrica
abstracto implementación simple de fábrica abstracta del grupo de conexiones de base de datos

1. Definición:

El patrón de fábrica simple significa que hay una clase de fábrica específica, que generará un objeto para usted de acuerdo con los parámetros que le pase. Pertenece al patrón de diseño creacional.

2. Ventajas:

El uso de la clase de fábrica obtendrá directamente un objeto utilizable, no necesita un objeto nuevo. Mejore la eficiencia de la programación.

3. Tres funciones del modelo de fábrica simple


Fábrica simple : el patrón de fábrica ciertamente necesita una fábrica, crear una fábrica simple responsable de implementar la lógica interna de todas las instancias. Cuando lo use, llame directamente a la clase de fábrica para crear los objetos requeridos.

Clase abstracta : la clase padre de todos los objetos creados con factoría simple, responsable de describir la interfaz pública de todas las instancias de atributos comunes.

Objetos específicos : este es el objetivo de su clase de fábrica creada.

4. Realización de Simple Factory

Tomemos como ejemplo la producción de teléfonos móviles de Apple. Apple es una fábrica simple. Las clases abstractas definen los comportamientos comunes de los teléfonos móviles de Apple. Los objetos específicos son IphoneX, Iphone11 e Iphone12.

Primero defina el comportamiento común a los teléfonos móviles de Apple

public interface Iiphone {//抽象类

	void call();//打电话
	
	void watch();//看视频
	
}

Definir objetos específicos para implementar la interfaz de Iiphone

public class IphoneX implements Iiphone {//具体对象
	@Override
	public void call() {	
		System.out.println("用IphoneX打电话");
	}
	@Override
	public void watch() {	
		System.out.println("用IphoneX看电视");
	}
}

public class Iphone11 implements Iiphone {
	@Override
	public void call() {
		System.out.println("用Iphone11打电话");
	}
	@Override
	public void watch() {	
		System.out.println("用Iphon11看电视");
	}
}


public class Iphone12 implements Iiphone {
	@Override
	public void call() {
		System.out.println("用Iphone12打电话");
	}
	@Override
	public void watch() {
		System.out.println("用Iphone12看电视");
	}

}

Diseñe una fábrica simple (aquí se escribe la implementación de tres fábricas simples)

public class SimpleFactory {//简单工厂

	/**
	 * 这种方式随着产品越来越多会添加更多的case也就是处理逻辑也会越来越多
	 * @param kind
	 * @return
	 */
	public static Iiphone makeIphone(String kind) {
		switch (kind) {
		case "X":
			return new IphoneX();
		case "11":
			return new Iphone11();
		case "12":
			return new Iphone12();
		}
		return null;
	}
	
	/**
	 * 直接提供对象的全类名,通过反射获取实例。解决了上述问题
	 * 但该方式传入的值是字符串,使用不方便
	 * @param className
	 * @return
	 */
	public static Iiphone makeIphoneByClassName(String className) {
		try {
			if(!(className==null||"".equals(className))) {
				
					Iiphone iphone = (Iiphone) Class.forName(className).newInstance();
					return iphone;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 直接传入class对象 解决上述问题
	 * @param classed
	 * @return
	 */
	public static Iiphone makeIphoneByClass(Class <? extends Iiphone> classed) {
		try {
			Iiphone iphone = classed.newInstance();
			return iphone;
		} catch (Exception e) {
			e.printStackTrace();
		} 
		return null;
	}
	
}

Usa tres fábricas para generar un objeto de iPhone

public class Client {

	public static void main(String[] args) {
		
		Iiphone iphoneX = SimpleFactory.makeIphone("X");//从工厂获取一个iphoneX对象
		Iiphone iphone11 = SimpleFactory.makeIphoneByClassName("cn.csdn.iphone.bean.impl.Iphone11");//从工厂获取一个iphone11对象
		Iiphone iphone12 = SimpleFactory.makeIphoneByClass(Iphone12.class);//从工厂获取一个iphone12对象
		
		iphoneX.call();
		iphone11.call();
		iphone12.call();
	}
	
}

Salida de consola

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_45355510/article/details/112550617
Recomendado
Clasificación