简单工厂模式

“当你想要创建对象的时候,可能不知不觉就已经使用了简单工厂模式。”

构造类

这里还是用水果来举例,先创建一个Fruit:

1
2
3
interface Fruit02 {
void color();
}

创建具体的水果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Orange02 implements Fruit02 {
public Orange02() {
System.out.println("我是橘子。");
}
@Override
public void color() {
System.out.println("颜色:橙色");
}
}
class Apple02 implements Fruit02 {
public Apple02() {
System.out.println("我是苹果。");
}
@Override
public void color() {
System.out.println("颜色:红色");
}
}

以上创建了橘子类和苹果类。

构造工厂

接下来是工厂类:

1
2
3
4
5
6
7
8
9
10
11
class FruitFactory {
public static Fruit02 getFruit(String type) {
Fruit02 fruit = null;
if (type.equalsIgnoreCase("Orange")) {
fruit = new Orange02();
} else if (type.equalsIgnoreCase("Apple")) {
fruit = new Apple02();
}
return fruit;
}
}

用if判断语句配合传入的字符串参数来选择创建什么的对象。

测试用例

1
2
3
4
public static void main(String[] args) {
Fruit02 fruit02 = FruitFactory.getFruit("Apple");
fruit02.color();
}

设计模式的原则

简单工厂模式虽然对创建对象的行为进行了封装,但是违背了开闭原则,因为每次添加一个类都要对原工厂进行修改。