工厂模式
介绍
创建型设计模式,使用非常广泛。例如Activity里面的生命周期方法都可以看作是工厂方法。
使用场景
在需要创建复杂对象的地方可以使用工厂模式。
那么什么是复杂对象?
简单来说,复杂对象是指那些包含多个成员属性的对象,这些成员属性也称为部件或零件,如汽车包括方向盘、发动机、轮胎等部件,电子邮件包括发件人、收件人、主题、内容、附件等部件,一个典型的复杂对象类代码示例如下:1
2
3
4
5
6
7
8class Product {
private String partA; //定义部件,部件可以是任意类型,包括值类型和引用类型
private String partB;
private String partC;
//partA的Getter方法和Setter方法省略
//partB的Getter方法和Setter方法省略
//partC的Getter方法和Setter方法省略
}
代码实现
抽象产品1
2
3
4
5public abstract class Product {
public abstract void method();
}
具体产品1
2
3
4
5
6
7
8
9
10
11
12
13public class ProductA extends Product {
@Override
public void method() {
System.out.println("我是产品A");
}
}
public class ProductB extends Product {
@Override
public void method() {
System.out.println("我是产品B");
}
}
抽象工厂1
2
3
4public abstract class Factory{
public abstract Product createProduct();
}
具体工厂1
2
3
4
5
6public class FactoryA extends Factory{
@Override
public Product createProduct() {
return new ProductA();
}
}
1 | public class Client { |
主要分为四大模块:
- 抽象产品
- 具体产品
- 抽象工厂
- 具体工厂
有时候也可以利用反射的方式来更简洁的生成具体的产品对象。
1 | public abstract class Factory{ |
1 | public class CreateFactory extends Factory{ |
1 | public class Client { |
这种方式简洁,动态。当然你也可以为每一个产品创建一个工厂,这被称为多工厂模式。
当我们的工厂只有一个的时候,可以省略掉抽象工厂,直接创建具体工厂,这称为简单工厂模式。