首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >创建型 工厂模式

创建型 工厂模式

原创
作者头像
用户5981674
发布2026-02-26 18:31:33
发布2026-02-26 18:31:33
620
举报

工厂模式分为 简单工厂、工厂方法模式、抽象工厂 简单工厂 /** 简单工厂 **/ public class SharePlatformFactory { private static final Map<String,IShare> platformMap = new HashMap(); static { platformMap.put("qq", new QQShare()); platformMap.put("wechat", new WeChatShare()); platformMap.put("ali", new AliPayShare()); }

/**

  • 拿取已经创建的对象 可以复用对象
  • @param platform
  • @return */ public static IShare createPlatform(String platform){ if(TextUtils.isEmpty(platform)){ return null; } return platformMap.get(platform); }

/**

  • 这样每次都会创建新的对象
  • @param platform
  • @return */ public static IShare createPlatform2(String platform){ if(TextUtils.isEmpty(platform)){ return null; } IShare sharePlatform = null; switch (platform){ case "qq": sharePlatform = new QQShare(); break; case "wechat": sharePlatform = new WeChatShare(); break; case "ali": sharePlatform = new AliPayShare(); break; } return sharePlatform; } } 工厂方法模式就是将上面的创建工厂平台的方法,抽象出一个工厂接口,然后创建不同的工厂,在工厂里面去创建相对应的对象,然后再使用一个简单工厂来创建不同的工厂,这样会比较符合开闭原则。 工厂方法模式 //因为工厂类只包含方法,不包含成员变量,完全可以复用, // 不需要每次都创建新的工厂类对象,所以,简单工厂模式的第二种实现思路更加合适。 //工厂方法模式 public class RuleConfigParserFactoryMap { //工厂的工厂 private static final Map cachedFactories = new HashMap<>(); static { cachedFactories.put("json", new JsonRuleConfigParserFactory()); cachedFactories.put("xml", new XmlRuleConfigParserFactory()); cachedFactories.put("yaml", new YamlRuleConfigParserFactory()); cachedFactories.put("properties", new PropertiesRuleConfigParserFactory()); } public static IRuleConfigParserFactory getParserFactory(String type) { if (type == null || type.isEmpty()) { return null; } IRuleConfigParserFactory parserFactory = cachedFactories.get(type.toLowerCase()); return parserFactory; } } 当对象的创建逻辑比较复杂,不只是简单的 new 一下就可以,而是要组合其他类对象,做各种初始化操作的时候,我们推荐使用工厂方法模式,将复杂的创建逻辑拆分到多个工厂类中,让每个工厂类都不至于过于复杂。而使用简单工厂模式,将所有的创建逻辑都放到一个工厂类中,会导致这个工厂类变得很复杂。 抽象工厂

工厂模式的使用场景: 当每个对象的创建逻辑都比较简单的时候,我推荐使用简单工厂模式,将多个对象的创建逻辑放到一个工厂类中。当每个对象的创建逻辑都比较复杂的时候,为了避免设计一个过于庞大的简单工厂类,我推荐使用工厂方法模式,将创建逻辑拆分得更细,每个对象的创建逻辑独立到各自的工厂类中。

工厂模式的作用: 封装变化:创建逻辑有可能变化,封装成工厂类之后,创建逻辑的变更对调用者透明。 代码复用:创建代码抽离到独立的工厂类之后可以复用。 隔离复杂性:封装复杂的创建逻辑,调用者无需了解如何创建对象。 控制复杂度:将创建代码抽离出来,让原本的函数或类职责更单一,代码更简洁。

  1. 简单工厂(Simple Factory) 使用场景: a. 当每个对象的创建逻辑都比较简单的时候,将多个对象的创建逻辑放到一个工厂类中。 实现: a. if else 创建不同的对象。 b. 用单例模式 + 简单工厂模式结合来实现。
  2. 工厂方法(Factory Method) 使用场景: a. 当每个对象的创建逻辑都比较复杂的时候,为了避免设计一个过于庞大的简单工厂类时,将创建逻辑拆分得更细,每个对象的创建逻辑独立到各自的工厂类中。 b. 避免很多 if-else 分支逻辑时。 实现: a. 定义相应的ParserFactory接口,每个工厂定义一个实现类。这种方式使用会有多个if else 让使用更加复杂。 b. 创建工厂的工厂来,此方案可以解决上面的问题。
  3. 抽象工厂(Abstract Factory)- 不常用 使用场景: a. 有多种分类方式,如方式要用一套工厂方法,方式二要用一套工厂方法,详见原文例子。 实现: 让一个工厂负责创建多个不同类型的对象(IRuleConfigParser、ISystemConfigParser 等),而不是只创建一种 parser 对象。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档