设计模式之简单工厂模式--简单工厂的实现历程

简单工厂模式(又叫静态工厂方法模式)

工厂方法模式
抽象工厂模式
抽象工厂简单实现数据库连接池

1.定义:

简单工厂模式,就是有一个具体的工厂类,它会按照你传递给它的参数给你产生一个对象。属于创建型设计模式。

2.优点:

使用工厂类会直接拿到一个可用的对象,你无需new一个对象。提高编程效率。

3.简单工厂模式的三个角色


简单工厂:工厂模式当然需要一个工厂,简单工厂负责实现创建所有实例的内部逻辑。使用时直接调用工厂类创建需要的对象。

抽象类:简单工厂创建的所有对象的父类,负责描述所有实例共有属性的公共接口。

具体对象:这个就是你工厂类创建的目标。

4.简单工厂的实现

​ 以苹果手机生产为例,苹果公司就是简单工厂,抽象类定义苹果手机所共有的行为,具体对象就是IphoneX、Iphone11、Iphone12

​ 首先定义苹果手机所共有的行为

public interface Iiphone {//抽象类

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

​ 定义具体对象实现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看电视");
	}

}

​ 设计简单工厂(这里写了三种简单工厂的实现)

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;
	}
	
}

​ 分别使用三种工厂产生一个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();
	}
	
}

​ 控制台输出

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45355510/article/details/112550617