实用 AI

可在线运行 AI 集合,涵盖 AI 文案生成、写作辅助、AI 绘图与照片修复、AI 配音、字幕生成、语音转录以及 AI 视频创作和数字人等多种 AI 服务

查看详情

工厂方法模式

软件设计模式
2021-05-17 14:29 · 阅读时长3分钟
小课

工厂方法模式还比较好理解,它主要用于当一个功能有多种实现方案,而我们需要根据参数使用其中一种实现方案的场景下。

我们先看看工厂方法模式的大概套路,假设有三个搜索引擎的实现,分别是Google,Baidu,Yahoo,我们需要根据不同语言返回不同的搜索引擎。

首先定义ISearchEngine接口和search方法。

public interface ISearchEngine {
    String search(String text);
}

然后是三个ISearchEngine的实现类,Google,Baidu,Yahoo。

1public class Google implements ISearchEngine {
2    @Override
3    public String search(String text) {
4        return "Results in English";
5    }
6}
7
8public class Baidu implements ISearchEngine {
9    @Override
10    public String search(String text) {
11        return "中文结果";
12    }
13}
14
15public class Yahoo implements ISearchEngine {
16    @Override
17    public String search(String text) {
18        return "日本の結果";
19    }
20}

最后是工厂类,根据不同的语言返回不同的搜索引擎实现类。

public class SearchEngineFactory {
    public static ISearchEngine createEngine(String lang) {
        switch (lang) {
            case "zh": return new Baidu();
            case "jp": return new Yahoo();
            default: return new Google();
        }
    }
}

这看上去和直接在使用的地方写个判断语句实例化不同的实现类没有多大区别,但是实际上工厂方法模式相对于直接实例化有几个优点。

  • 封装了实例化实现类的通用逻辑,如果有多处调用,只需要维护工厂方法。
  • 使用的地方面向接口编程,不再关心具体的实现,后续扩展实现不影响使用它的地方。
总结

工厂方法模式的特点,有一个接口和多个实现类,工厂类有一个方法可以根据参数实例化不同的实现类。工厂方法模式的优点是提高代码的了可维护性和可扩展性。

factory design pattern工厂方法模式简单工厂模式