首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之工厂方法模式

设计模式之工厂方法模式

作者头像
闻人的技术博客
发布2019-09-19 16:50:09
5000
发布2019-09-19 16:50:09
举报
文章被收录于专栏:程序员闻人程序员闻人

前言

学习过简单工厂模式,知道了其优点和不足,再来看工厂方法模式就更容易掌握了,工厂方法模式解决简单工厂模式扩展不足的缺陷,就让我们看看它是如何做到的.

正文

工厂方法模式

通过定义一个用于创建对象的接口, 让子类决定创建具体哪个类,属于Java中用得最多的模式之一.

首先来看下工厂方法模式的通用类图如下

其中,抽象工厂类电定义了创建对象的抽象方法,而具体如何创建产品则有它的具体实现工厂类决定,对应的产品类则将一些公共的产品特性和行为封装成抽象类,然后继承这个抽象类根据自身需求定制.

基于类图,我们可以简单实现下工厂方法模式的代码,如下所示

优点

工厂方法具有很好扩展性,大大降低了产品类与客户端类(上图FactoryMethodLab类)之间的耦合度, 就如上面代码所示,如果有多一个具体产品类 ConcreteProduct3, 只需继承Product,然后直接就可以通过 ConcreteFactory 来创建了. 也十分利于单元测试,去除了原来简单工厂的 switch/if-else 模式.

应用场景

既然是最常见的设计模式,那么我们日常开发中,又在哪里遇到过这个模式呢? 就拿Java企业开发中最常用的框架 Spirng Framework来说, Ioc容器就是基于工厂模式来创建 Beans 和管理 Beans 的生命周期, 如 createBean, getBean()等一些方法.

虽然针对存在new一个对象的地方,都可以用上工厂方法模式,但仍需要考虑是否有必要新增一个工厂类来管理对象的创建.

使用建议

  • 需要频繁new不同对象时
  • 定制需要灵活,可扩展框架时
  • 需要对异构系统进行同构化时

往往工厂方法模式会配合与其他模式混合使用,如模板方法模式, 单例模式等的,使得代码实现更加灵活和优雅.

结语

在本文中,我们学习了工厂方法模式和基本代码实现,也感受到了与简单工厂模式的不同, 其强大的模式很大程度扩展了我们的代码,下文我们学习下更强大的抽象工厂模式.

参考
  • 《设计模式之禅》
  • Factory Patterns - Factory Method Pattern: https://www.codeproject.com/Articles/1135918/Factory-Patterns-Factory-Method-Pattern
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 闻人的技术博客 微信公众号,前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 正文
    • 工厂方法模式
      • 优点
      • 应用场景
        • 使用建议
          • 参考
      • 结语
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档