当前位置: 首页 > news >正文

创建型 工厂模式

工厂模式分为 简单工厂、工厂方法模式、抽象工厂

简单工厂

/**

简单工厂

**/

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 对象。

http://www.jsqmd.com/news/416798/

相关文章:

  • 2026年评价高的斑马鱼繁殖系统/斑马鱼饲养系统哪家质量好厂家实力参考 - 行业平台推荐
  • 2026切纸机品牌哪家专业?行业资深从业者分析推荐 - 品牌排行榜
  • elscreen标签背景颜色 - liyan
  • ai使用分享
  • 创建型 建造者模式
  • find匹配文件名 - liyan
  • AI鲁棒性测试详解
  • 7连标!中电金信助力银行外汇展业改革
  • 2026年靠谱的电感振动盘/精密铝盘振动盘生产厂家实力参考哪家强(更新) - 行业平台推荐
  • 我的新文章 - 法Q
  • 2026年切纸机厂家推荐:几家实力企业盘点 - 品牌排行榜
  • golang常见类型作为参数的eBPF解析 - liyan
  • 2026年口碑好的景观不锈钢雕塑/商业地产不锈钢雕塑帮我推荐几家源头厂家推荐 - 行业平台推荐
  • 2026年质量好的三体系认证公司/9001认证公司实力厂家综合评估推荐几家 - 行业平台推荐
  • http及websocket性能对比 - liyan
  • OceanBase混合检索(Hybrid Search):多模态检索实战指南
  • 一种责任链模式的实现 - liyan
  • 2026年切纸机品牌推荐:这些口碑品牌值得关注 - 品牌排行榜
  • lisp-do循环 - liyan
  • 2025年方圆3公里必吃烧菜火锅TOP10榜单出炉,美食/社区火锅/烧菜火锅/特色美食/火锅烧菜火锅品牌推荐 - 品牌推荐师
  • 黑客必备利器:如何在系统上安装和使用CobaltStrike?黑客技术零基础入门到精通实战教程(CobaltStrike工具 -CobaltStrike木马 -CobaltStrike安装 Coba
  • lisp-lambda函数 - liyan
  • 2026年靠谱的水利工程水泥涵管/市政排水管水泥涵管哪家便宜源头直供参考(真实参考) - 行业平台推荐
  • 2026年评价高的原料药生产耙式真空干燥机/农药耙式真空干燥机实力厂家口碑参考口碑排行 - 行业平台推荐
  • 合并区间 - liyan
  • 河北石家庄人才落户咨询品牌机构哪家口碑好 - 工业推荐榜
  • GEO优化多少钱?五大高性价比服务商品牌推荐 - 博客湾
  • 分析河北实力强的视功能检查专业企业,舒同视光口碑怎么样 - mypinpai
  • 使用Lua语言对嵌入式通信设备进行定制化的Soc开发 —— 《深度学习LuatOS》嵌入式
  • C# hangfire配置方法 - Bill