设计模式之工厂模式

本文深入解析工厂模式的概念,包括简单工厂模式、工厂方法模式和抽象工厂模式的实现方式,通过实例展示了如何利用工厂模式减少代码耦合,提高软件设计的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.什么是工厂模式

工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类

二.工厂模式的写法

1.简单的工厂模式
在这里插入图片描述我们来看下具体的写法:
接口类;


public interface Calculate {

	double calulate(double x,double y);
	
}

实现类:

public class Minus implements Calculate{

	@Override
	public double calulate(double x,double y) {

		double result=x-y;
		System.out.println("Minus Result:"+result);
		return result;
	}

}

public class Plus implements Calculate {

	@Override
	public double calulate(double x, double y) {
		double result=x+y;

		System.out.println("Plus Result:"+result);
		return result;
	}

}

工厂的创建:

/** 
 * 简单工厂模式
 * @author Seven
 *
 */
public class Factory {
	

	
	/** 根据需求创建不同的对象
	 * @param cal
	 * @return
	 */
	public static Calculate createCalculate(String cal) {
		switch (cal) {
		case "plus":
			
			return new Plus();
		case "minus":
			
			return new Minus();
		default:
			break;
		}
		return null;
		
	}

}

客户端调用:

public class Client {

	public static void main(String[] args) {
		
		Factory.createCalculate("plus").calulate(2, 1);
		Factory.createCalculate("minus").calulate(2, 1);
	}
}

打印结果:
Plus Result:3.0
Minus Result:1.0

简单工厂的好处,就是在创建对象的时候给出了判断的必要,根据客户端动态根据条件生成所需要的对象,祛除了对具体产品的依赖。不过这样貌似在修改的时候增加了一些麻烦,比如我们要新加一个具体实现类的时候,是不是要修改工厂里面的方法。这样就违背了设计模式的开闭原则,虽然我们扩展开放了,但是我们修改也开放了,所以我们要把工厂方法给抽象出去,于是就有了下面的工厂方法模式

2.工厂方法模式
我们接着上面说,如果我们此时要加另外一个算法,是不是要去修改简单工厂类,这样其实已经违背了设计原则,于是我们将工厂类也抽象出来,于是便有了下面的UML类图:
在这里插入图片描述
大致说下思路,这样抽象出来的好处,就是我们无论扩展多少个都不用去修改工厂的方法,只需要新建一个算法类去实现算法接口,然后新建一个具体实现工厂类去继承这个抽象工厂返回新建的算法对象即可。
这里贴一下抽象工厂和具体实现类:

public abstract class Factory {

	public abstract  Calculate createCalulate();
}

具体创建工厂:

public class DivFactory extends Factory {

	@Override
	public Calculate createCalulate() {
		return new Div();
	}

}

客户端调用

public class Client {

	public static void main(String[] args) {
		
			Factory factory=new DivFactory();
			Calculate div=factory.createCalulate();
			div.calulate(6, 2);
	}
}

打印结果
Div Result:3.0

3.抽象的工厂模式它的定义就是提供一个创建一系列相关或相互依赖的对象的接口,而无需指定他们具体的类,就拿上面的例子来说,我们的Factory里面只提供一个抽象方法来生成计算的工厂,如果要生成其他类型的工厂呢,所以把生成的对象的接口添加到Factory中,这样就是基本的抽象工厂模式了。

三.思维拓展

我们可以尝试用反射加简单工厂来实现对象的创建,这里就不具体介绍了。可以参考我之前写的一篇反射注解的总结,自己写一写。

四.总结

本文介绍了什么是工厂模式以及工厂模式的常见写法,如果本文对你有用,可以点个赞,如果有不正之处,欢迎留下你的评论,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值