本人属于菜鸟级别的,文章中有错误的地方,敬请批评指正
不废话,进入主题
工厂方法模式:
(1)对于某个产品,调用者很清楚,要用哪个工厂去制造它
(2)对于某个产品,我只想创建这个产品,我不想知道是哪个工厂创建它的,用哪个工厂是别人的事,跟我没关系(这里的别人是生产者),但是你创建的过程要让我知道,举个例子,我想定制一辆法拉利,我不管这个汽车是意大利工厂生产的还是朝鲜工厂生产的,我只给法拉利总店一个订单,让生产厂家根据订单,环境等决定用哪个工厂生产。但是我要知道你的决策过程。
例子:世界上有著名的手机工厂,诺基亚工厂,摩托罗拉工厂,苹果工厂,我想要一台诺基亚。
分析:一般的菜鸟想,哇,这个好简单,我只要创建一个诺基亚工厂,里面生产诺基亚就行了。但是世界上所有人都用诺基亚吗。记住,需求总是变化的,菜鸟!所以我们可以创建一个抽象工厂,让诺基亚工厂,苹果工厂继承它就行了。而且我们也要把手机抽象!
public class MobileTest {
public static void main(String[] args){
MobileFactory mf = new NokiaFactory();
Mobile mobile = mf.produceMobile();
mobile.call();
}
}
abstract class MobileFactory {
abstract Mobile produceMobile();
}
public class NokiaFactory extends MobileFactory{
@Override
Mobile produceMobile() {
System.out.println("produce Nokia!!!!");
return new Nokia();
}
}
abstract class Mobile {
abstract void call();
}
public class Nokia extends Mobile{
@Override
void call() {
System.out.println("this is Nokia");
}
}
public class Apple extends Mobile{
@Override
void call() {
System.out.println("This is IPhone");
}
}
读完代码菜鸟肯定大呼过瘾,不过我们可以深入的思考一下,这种模式到底有什么好处!
工厂方法的核心是个抽象工厂,如果需要添加一个新产品,你完全不需要改代码了,只要添加这个产品的类和产品工厂的类就行了,你就能几分钟搞定去喝茶了。
反观简单工厂模式,如果需要添加一个新产品,你还要改代码,晕,菜鸟才去改代码。我们的目标是,“新的需求只要加新类,而不要改代码”