问题提出
Java的工厂模式与现实生活中的工厂的模型是很相似的。工厂是用来做什么?当然是用来生成产品。因此在Java的工厂模式的关键点就是如何描述好产品和工厂这2个角色之间的关系。
下面来仔细描述一下不同的关系以及对应的设计模式
1)单一产品系,工厂只生产一种类型的产品
让我们简单构思一下简单的工厂生产模型,既然只有一个产品,那只需要一个车间就好了,一个车间分别生产三种不同种类的小汽车。好,下面看看简单工厂的设计模式。
//定义小汽车接口:ICar.java public interface ICar { }
public class TopCar implements ICar { }
public class MidCar implements ICar { }
public class LowCar implements ICar { }
public class CarSimpleFactory { public static final String TOPTYPE = "toptype"; public static final String MIDTYPE = "midtype"; public static final String LOWTYPE = "lowtype"; private CarSimpleFactory(){ } public static ICar create(String mark){ ICar obj = null; if(mark.equals(TOPTYPE)){ obj = new TopCar(); } else if(mark.equals(MIDTYPE)){ obj = new MidCar(); } else if(mark.equals(LOWTYPE)){ obj = new LowCar(); } return obj; } }
简单工厂功能类编写步骤:
1.编写抽象产品接口
2.编写具体产品子类
3.编写工厂类。简单工厂类的特点,它是一个具体的类,非接口型抽象类。有一个重要的create()方法,并且用if...else或者switch开发创建所需产品。因为可以把这个简单工厂类实现成一个工具类,所以直接用静态方法就可以了,如有必要甚至可以把构造方法私有化。
下面考虑一种情形,工厂扩张啦!可以加工生产超级高档型的汽车。在上面的生产模式下要怎么修改呢?
1)新增ICar子类SuperCar
2)修改工厂类SimpleCarFactory中的create()方法,添加判断分支。
子类SuperCar的添加是必然的,然而能不能不用修改工厂类呢?
或者从另一个角度分析,在一个生产线上生产几种不同种类的产品,这样我们还需要对每个产品加以判断种类来分类。当然,假若只有2种种类要区分,这样当然没问题,但是若是有多个种类要区分呢?显然,不能在一条生产线上生产多种种类的产品!那意味着对于每一种种类我们都需要一条生产线。这就是所谓的工厂模式!
public abstract class AbstractFactory { public abstract ICar create(); }
public class LowFactory extends AbstractFactory { public ICar create(){ return new LowCar(); } }
View Code
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java设计模式:工厂模式 - Python技术站