工厂模式也是是最常用的设计模式之一,工厂模式一般分为简单工厂、工厂、抽象工厂三种情况,所以分三部分来整理:第一部分总结简单工厂、第二部分总结工厂,第三部分总结抽象工厂。
- 简单工厂模式的概念
- 工厂模式的好处
- 简单工厂模式的类图
- 简单工厂模式的实现
简单工厂模式的概念
工厂模式概念: 我们最常用的一种实例化对象模式,是用工厂方法代替new操作的一种模式。把对象的创建放到一个工厂类中,通过参数来创建不同的对象。 工厂用来生产产品,有两个关键角色:产品和工厂。工厂模式的关键点在于如何描述好两个角色之间的关系。
工厂模式的优点
带来的好处:
在软件系统中,经常面临“一系列相互依赖的对象”的创建工作,为了绕过常规对象的创建方式(即用new创建),利用工厂模式,提供一种“封装机制”来减少功能调用程序和“多系列具体对象创建工作”的耦合性。
1、把对象的创建集中在一个地方(工厂中),在增加新的对象类型的时候,只需要改变工厂方法;、;否则在应用中四处散布对象创建逻辑,如果创建方法改变时则需要四处修改,维护量增加。
2、应用的场合是新的对象类型很可能经常被添加进来。
简单工厂模式的类图
简单工厂模式的实现
实现步骤
1、定制抽象产品接口,如ICar
2、定制其具体子类,如类TopCar(高档车)、MidCar(中档车)、LowCar(低档车)
3、定制工厂类,如CarSimpleFactory,是一个具体的类,非接口或者抽象类,提供一个create()方法,利用分支结构创建所需产品
//定义小汽车接口:ICar.java
public interface ICar{
//由于工厂模式仅关系对象的创建,为说明方便,无需定义方法
}
//下面定义高、中、低档具体的小汽车
//高档汽车:TopCar.java
public class TopCar implements ICar {
}
//中档汽车:MidCar.java
public class MidCar implements ICar {
}
//低档汽车:LowCar.java
public class LowCar implements ICar {
}
//简单工厂:CarSimpleFactory.java
public class CarSimpleFactory {
public static final String TOPTYPE = "toptype";
public static final String MIDTYPE = "midtype";
public static final String LOWTYPE = "lowtype";
public static ICar create (String mark){
ICar obj = null;
if (mark == TOPTYPE){ //如果是高档类型
obj = new TopCar(); //则创建高档汽车
}
else if (mark == MIDTYPE){
obj = new MidCar();
}
else if (mark == LOWTYPE){
obj = new LowCar();
}
return obj;
}
}
//测试程序:CarTest.java
public class CarTest {
public static void main(String[] args) {
ICar obj = CarSimpleFactory.create("topcar");
}
}
创建简单工厂的时候,通常不用创建简单工厂的类实例,没有创建的必要。因此可以把简单工厂类实现成一个工具类,直接使用静态方法就可以啦。也就是说,简单工厂方法通常是静态的,所以也被称为静态工厂。
如果现在又新增了 一个超高档次的汽车,在简单工厂模式下,需要做的工作有:
1、新增ICar的实现类SuperCar
2、修改CarSimpleFactory中的create()方法,增加SuperCar的选择分支
比较麻烦。。。。。。。。。
新增SuperCar类是必然的,能否不修改工厂类就能完成所需功能?????
请看:Java设计模式—-工厂模式(二)