创建型模式之简单工厂 | 张扎瓦的博客

创建型模式之简单工厂

简单工厂模式的介绍及写法


简单工厂模式

提供一个创建对象实例的功能,而无需关心其具体的实现。被创建的实例类可以是接口,抽象类,也可以是具体的类。简单工厂并不在23中设计模式中,更多的时候是一种编程习惯。它通过接受不同的参数来返回不同的对象。

示例代码

想象一个场景,你需要用笔写 一封信,有三种笔:铅笔,圆珠笔,中性笔,每种笔都有write()方法。

先定义笔接口

1
2
3
public interface Pen {
void write(String words);
}

铅笔类

1
2
3
4
5
6
public class Pencil implements Pen {
@Override
public void write(String words) {
System.out.println("使用铅笔写:"+words);
}
}

圆珠笔类

1
2
3
4
5
6
public class BallpointPen implements Pen {
@Override
public void write(String words) {
System.out.println("使用圆珠笔写:"+words);
}
}

中性笔类

1
2
3
4
5
6
public class GelPen implements Pen {
@Override
public void write(String words) {
System.out.println("使用中性笔写:"+words);
}
}

下面是工厂类的具体实现

1
2
3
4
5
6
7
8
9
10
11
12
13
public class PenFactory {
public static Pen getPen(String penType) {
if ("pencil".equalsIgnoreCase(penType)) {
return new Pencil();
} else if ("gelpen".equalsIgnoreCase(penType)) {
return new GelPen();
} else if ("ballpointpen".equalsIgnoreCase(penType)) {
return new BallpointPen();
} else {
return null;
}
}
}

这个工厂类根据不同的penType,new 不同的Pen对象。

在客户端调用

铅笔写

1
2
Pen pencil = PenFactory.getPen("pencil");
pencil.write("Hi tom!");

圆珠笔写

1
2
Pen ballpointPen = PenFactory.getPen("ballpointpen");
ballpointPen.write("Hi tom!");

中性笔写

1
2
Pen gelPen = PenFactory.getPen("gelpen");
gelpen.write("Hi tom!");

客户端只需要从工厂取自己需要的产品就可以,不需要自己new,降低了耦合度。

如果我的文章对您有所帮助,不妨打赏一杯豆浆以资鼓励(○` 3′○)