设计模式之工厂模式
工厂模式作为创建型模式中最经典模式,可以说是被运用的最为广泛。就算是刚刚学习java的小白,也会不经意间得在自己的程序中用到这一模式的一部分,无意识地就成就着工厂模式。
那么工厂模式是怎样的呢?怎么的代码设计才能称作完整的工厂模式?
就个人理解,工厂模式由其功能定义:为创建对象提供一个过渡的接口,使得创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。
工厂模式讲究创建对象的时候不直接使用new 方法,因为new方法有时候会暴露创建对象的过程(new方法中常常带有构造参数)。
工厂模式的类图可以由下图表示:
由类图可以看出,客户(client)想要获取到产品对象(product),是通过创建类(creator)来创建,而非直接创建。且这一过程还使用了接口类来提高同一类产品的扩展性。当有新的产品产生时,只要按照抽象产品角色、抽象工厂角色提供的合同来生成就可以直接被客户适用了,而不必去修改任何已有的代码。工厂模式也是符合开闭原则的。
下面来看一个完整的例子加深对工厂模式的理解。
1 //抽象工厂角色 2 public interface Driver{ 3 public Car driverCar(); 4 } 5 //具体工厂角色 6 public class BenzDriver implents Driver{ 7 public Car driverCar(){ 8 return new Benz(); 9 } 10 } 11 //抽象产品角色 12 public interface Car{ 13 public void drive(); 14 } 15 //具体产品角色 16 public class Benz implents Car{ 17 public void drive(){ 18 doSomething(); 19 } 20 }