简单工厂模式
简单工厂模式结构:
1、抽象产品:描述了产品的主要功能和特性
2、具体产品:实现或者继承抽象产品的子类(有时候适合用接口实现,有时候适合用抽象类实现)
3、具体工厂:提供创建产品的方法
场景模拟
我们需要一个读取文件的工具类,目前这个工具类需要可以读取图片、和文字,以后可能还会随着业务发展扩展这个类,
那我们要怎么设计呢?
首先设计一个读取文件的工具类接口ReadFile,里面提供读取的方法。然后再设计一个读取图片的类ReadFileImg它实
现ReadFile接口,然后在设计一个读取文本的类ReadFileText它也实现ReadFile。在设计一个具体工厂类FilesFactory
用来创建工具类。
抽象产品:ReadFile
具体产品:ReadFileImg
具体产品:ReadFileText
具体工厂:FilesFactory
类图

抽象产品:ReadFile代码
public interface ReadFile {
void read();
}
具体产品:ReadFileImg代码
public class ReadFileImg implements ReadFile {
@Override
public void read() {
System.out.println("读取图片完成...");
}
}
具体产品:ReadFileText
public class ReadFileText implements ReadFile {
@Override
public void read() {
System.out.println("读取文本完成...");
}
}
具体工厂:FilesFactory
public class FilesFactory {
public static ReadFile createBean(String type) {
ReadFile readFile = null;
if("img".equals(type)) {
readFile = new ReadFileImg();
}else if("text".equals(type)) {
readFile = new ReadFileText();
}else {
throw new RuntimeException("不能正常创建对象!");
}
return readFile;
}
}
测试代码
public class Test {
public static void main(String[] args) {
ReadFile readFile = FilesFactory.createBean("img");
readFile.read();
}
}
运行结果

优缺点
1、优点:扩展新功能时更容易扩展
2、缺点:增加新功能时还是需要修改工厂类的代码,违背了“开闭原则”。