设计模式-工厂模式详解(非抽象工厂模式)

本文详细介绍了工厂模式的三种形式:普通工厂模式、多工厂模式及静态工厂模式,并通过具体示例对比了它们之间的优缺点。

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

工厂模式分为三种

第一种:普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。

我们来看个小例子(关于笔和写的案例)

首先我们写一个接口类,里面定义一个写的方法:

public interface Writer {
	public void write();
}

然后我们来看实现类:

public class GangBi implements Writer {
	@Override
	public void write() {
		// to do something
	}
}
public class MaoBi implements Writer {
	@Override
	public void write() {
		// to do something
	}
}
然后创建工厂类:
public class WriteFactory {
	// 简单工厂模式,弊端:如果字符串输错,实例就创建不成功
	public Writer produce(String type) {
		if ("gb".equals(type)) {
			return new GangBi();
		} else if ("mb".equals(type)) {
			return new MaoBi();
		} else {
			return null;
		}
	}
}
测试类:
public class FactoryTest {
	public static void main(String[] args) {
		WriteFactory factory = new WriteFactory();
		Writer write = factory.produce("mb");
		write.write();
	}
}
上面是简单工厂模式,上面注释也说了,如果输入的字符串有错,则不能正确常见对象,并且这种方法也并不友好,所以这种工厂模式不推荐使用。
第二种,多工厂模式:就是对工厂方法进行改进,提供多个工厂方法,分别创建对象。
修改WriteFactory如下:
public class WriteFactory {
	public Writer produceGb() {
		return new GangBi();
	}
	public Writer produceMb() {
		return new MaoBi();
	}
}
测试类:
public class FactoryTest {
	public static void main(String[] args) {
		WriteFactory factory = new WriteFactory();
		Writer write = factory.produceMb();
		write.write();
	}
}
这种方法避免了上面讲的问题。
第三种,静态工厂模式:修改工厂类里面的方法,把所有方法都变成静态的,这样,调用工厂方法的时候不需要创建实例就可以了。
public class WriteFactory {
	public static Writer produceGb() {
		return new GangBi();
	}
	public static Writer produceMb() {
		return new MaoBi();
	}
}
测试类:
public class FactoryTest {
	public static void main(String[] args) {
		Writer write = WriteFactory.produceMb();
		write.write();
	}
}

总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且有共同的接口时,可以通过工厂模式方法进行创建。上述三那种模式中,第一种如果字符串输错了,会导致实例创建不成功,第三种相对于第二种不要创建工厂方法实例,所以,大多数情况下,推荐使用第三种静态工厂模式。

public class WriteFactory {
	public static Writer produceGb() {
		return new GangBi();
	}
	public static Writer produceMb() {
		return new MaoBi();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值