工厂方法(Factory Method)
* 工厂方法把不同的产品放在实现了工厂接口的不同工厂类(FactoryAImpl,FactoryBImpl...)里面,
* 这样就算其中一个工厂类出了问题,其他工厂类也能正常工作,互相不受影响,
* 以后增加新产品,也只需要新增一个实现工厂接口工厂类,就能达到,不用修改已有的代码
代码解释:
1.创建产品接口Product,并创建2个产品子类android手机、Apple手机,都实现Product接口
public interface Product { }
public class Android implements Product{ public Android() {
System.out.println("生产一个Android手机...");
}
}
public class Apple implements Product{ public Apple() {
System.out.println("生产一个Apple手机...");
}
}
2.创建工厂接口,添加生产方法(返回值是Product),并针对每个产品,创建对应的工厂实现类
public interface Factory { /**
* 生产一个产品
* @return
*/
public Product process();
}
public class AndroidFactory implements Factory { @Override
public Product process() {
return new Android();
}
}
public class AppleFactory implements Factory { @Override
public Product process() {
return new Apple();
}
}
3.客户端调用:Test
public static void main(String[] args) {
// Factory factory = new AppleFactory();//苹果工厂
Factory factory = new AndroidFactory();//安卓工厂
factory.process();
}
这样,只需要修改new XXXFactory()就可以生产该工厂对应的产品
* 缺陷:
* 工厂方法为每种类型的产品(比如手机类、汽车类...)的 每个实现类(比如手机类[安卓工厂、苹果工厂] 汽车类[宝马工厂、奔驰工厂])创建一个对应的工厂类,当有数百种甚至上千种产品的时候,也必须要有对应的上百成千个工厂类,这就出现了传说的类爆炸,对于以后的维护来说,简直就是一场灾难.....