应用场景:
当某产品有一些种类且种类不是特别多的情况下,可以选择使用简单工厂来创建所需产品(对象),而不需要关心具体的创建细节,相对来说便于后面的维护和扩展(必须增加产品种类不需要改动太多之前的代码)
优缺点:
优点:简单工厂结构简单,调用方便,可以明确区分工厂和产品的职责;
缺点:工厂负责所有产品的创建,当产品过多时,代码可能会变的比较臃肿。
简单工厂类图:
举个栗子(关于设计模式的使用简单的说一下,设计模式实现起来有很多种方式和变种,不可能一一列举出来,只能选择某一种拿出来说一下,仅供参考):
1:新建一个产品的上层抽象接口,比如我的目的是实现输出汽车的名称,首先抽象一个ICar的接口
public interface ICar {
public void name();
}
2:分别建两个类,实现ICar接口,重写name()
public class Lamborghini implements ICar {
@Override
public void name() {
System.out.println("I AM A Lamborghini");
}
}
public class Bus implements ICar{
@Override
public void name() {
System.out.println("I AM A BUS");
}
}
3:建一个工厂类,负责根据参数生成对象。
public class CarFactory {
public static ICar create (Class<? extends ICar> icar) {
ICar iCar = null;
try {
iCar = icar.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return iCar;
}
}
4:测试
public class FactoryTest {
public static void main (String[] args) {
ICar iCar1 = CarFactory.create(Lamborghini.class);
ICar iCar2 = CarFactory.create(Bus.class);
iCar1.name();
iCar2.name();
}
}
5:结果
I AM A Lamborghini
I AM A BUS
总结:
这就是一个简单工厂简单实现,有人可能会说不这么用不行么,直接new一个对象还省了很多代码。其实却实可以使用设计模式的同时确实会在一定程度上带来代码或者结构上的复杂度,但是个人理解,设计模式从来就不是为了让程序员在开发过程中少写几行代码而存在的,它的意义在于带来了代码的可重用性,可读性和可维护性等方面的提升,举个例子,比如上面的实现中,如果再新增加一个出租车类,只需要新增一个类,在使用的地方将附上参数即可,而不需要去改动之前的实现,另外阅读起来也是很清晰明了。