[设计模式] ------ 工厂方法模式

工厂方法模式解析
本文深入讲解工厂方法模式,通过手机厂、肥皂厂等实例,阐述如何利用此模式创建一系列具有共同父类的对象。该模式将对象实例化过程延迟到子类工厂,既实现了类的解耦,又增加了系统的灵活性。

工厂方法模式

手机厂造手机,肥皂厂造肥皂,药品厂造药品。

假设有一大类对象A1,A2,A3,A4…他们都有一个共同的父类A
A1可以想成是手机,A2可以想成肥皂…

(下面例子的A1Factory就是手机厂,A2Factory就是肥皂厂)

那么如何利用工厂方法模式创建这些对象呢?看个例子

1、定义一个工厂的接口以及返回实体的方法
interface Factory{
	// 定义一个方法,返回A
	A create();
}
2、针对每个对象,定义创建他们的工厂,每个工厂都实现第一步的工厂接口
class A1Factory implement Factory{
	// A1的工厂类,返回A1对象,用A引用返回出来
	public A creat(){
		return new A1();
	}
}
class A2Factory implement Factory{
	// A2的工厂类,返回A2对象,也用A引用返回出来
	public A creat(){
		return new A2();
	}
}
A3、A4类似
3、使用的时候

看到下面这个效果,大概就能明白什么意思了吧,由工厂的父类,创建出对象,也用对应的父类A来接。那就相当于屏蔽了子类的差异,只要源头上换个工厂,那么返回的A就是对应工厂里面的产生的A的子类对象。

public A getObj(Factory f){
	return f.create();
}

main(){
	// 给手机工厂,出来就是手机对象
	A A1 = getObj(new A1Factory());
	// 给肥皂工厂,出来就是肥皂对象
	A A2 = getObj(new A2Factory());
}

优缺点

很明显,工厂方法模式,创建每个对象都需要给他再创建一个对应的工厂类。这既是优点,又是缺点。
说优点,是因为这样做,相比较简单工厂来说,是把类的实例化延迟到了子类工厂上。
说缺点,是因为这样做,每次有新的类型,都要创建对应的工厂,感觉很冗余。

扩展

经常在工厂方法模式的各个子类工厂中,再使用简单工厂模式。
也就是说A1Factory的create方法,不一定只返回A1,可能还是A1的某个子类,至于具体是哪个,可以给create方法加个type入参,根据type的不同去区分。

总之就是这么个意思,就是实际生产中,很多情况下都是多个设计模式一起用,并不是只用某个设计模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值