工厂模式
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
示例演示:
我们定义一个生物接口,生物接口中有一个说话的功能。
1
2
3
4
5
6
7
8
9package test.factory;
/**
* 所有生物的标识
*/
public interface Organism {
//所有生物共有的一个功能,有自己的沟通方式
void say();
}创建两个实体类,让其拥有Organism的属性
1
2
3
4
5
6
7
8
9package test.factory;
public class People implements Organism {
public void say() {
System.out.println("people say");
}
}1
2
3
4
5
6
7
8
9package test.factory;
public class Animal implements Organism {
public void say() {
System.out.println("animal say");
}
}创建产生对象的工厂
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18package test.factory;
import org.apache.commons.lang3.StringUtils;
public class OrganismFactory {
public Organism getOrganism(String type) {
if (StringUtils.isBlank(type)) {
return null;
}
if (type.equalsIgnoreCase("people")) {
return new People();
} else if (type.equalsIgnoreCase("animal")) {
return new Animal();
}
return null;
}
}完成上述步骤,我们就可以开始演示了
1
2
3
4
5
6
7
8
9
10
11package test.factory;
public class FactoryDemo {
public static void main(String[] args) {
OrganismFactory organismFactory = new OrganismFactory();
Organism o1 = organismFactory.getOrganism("people");
o1.say();
Organism o2 = organismFactory.getOrganism("animal");
o2.say();
}
}运行结果:
1
2people say
animal say
说明:
优点:1、一个调用者想创建一个对象,只要知道其名称就可以了。 2、扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。 3、屏蔽产品的具体实现,调用者只关心产品的接口。
缺点:每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。