本专栏内容参考自:咕泡学院Tom老师的《Spring5核心原理与30个类手写实战》,仅作个人学习记录使用,如有侵权,联系速删.

  工厂方法模式指定义一个创建对象的接口,但让实现这个接口的类决定实例化哪个类,工厂方法模式让类的实例化推迟到子类中进行。在工厂方法模式中用户只需要关心所需产品对应的工厂,无需关心创建细节,而且加入新产品时符合开闭原则。
  工厂方法模式主要解决产品扩展的问题。在上一篇简单工厂模式中链接.,随着产品链的丰富,如果每个课程的创建逻辑都有区别,则工厂的职责会变得越来越多,有点像万能工厂,不便于维护。根据单一职责原则我们将职能继续拆分,专人干专事。Java课程由Java工厂创建,Python课程由Python工厂创建,对工厂本身也做一个抽象。
  话不多说上代码:
先创建ICourseFactory接口:

public interface ICourseFactory {ICourse creat();
}

再分别创建子工厂,JavaCourseFactory类和PythonCourseFactory类:

public class JavaCourseFactory implements ICourseFactory{@Overridepublic ICourse creat() {return new JavaCourse();}
}
public class PythonCourseFactory implements ICourseFactory{@Overridepublic ICourse creat() {return new PythonCourse();}
}

测试代码如下:

public class Main {public static void main(String[] args) {ICourseFactory factory = new PythonCourseFactory();ICourse course = factory.creat();course.record();factory = new JavaCourseFactory();course = factory.creat();course.record();}
}

然后还是看一下logback中工厂方法模式的应用,代码太长,贴个类图:

总结一下:
工厂模式适用于以下场景:
(1)创建对象需要大量重复的代码。
(2)客户端(应用层)不依赖产品类实例如何被创建、如何被实现等细节。
(3)一个类通过其子类来指定创建哪个对象。
工厂方法模式也有缺点:
(1)类的个数容易过多,增加复杂度。
(2)增加了系统的抽象性和理解难度。

Spring常用设计模式--工厂方法模式相关推荐

  1. 4. 星际争霸之php设计模式--工厂方法模式

    题记 ============================================================================== 本php设计模式专辑来源于博客(jy ...

  2. java 工厂方法_java设计模式-工厂方法模式

    1.工厂方法(FactoryMethod)模式的定义 定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中.这满足创建型模式中所要求的"创建与使用相分离" ...

  3. JAVA设计模式 - 工厂方法模式

    工厂方法模式(Factory Pattern) 是一种创建型设计模式 , 它是Java中最常用的设计模式之一 . 1 . 工厂方法模式的定义 定义一个创建对象的接口 , 让子类决定实例化哪一个类 . ...

  4. Java设计模式—工厂方法模式抽象工厂模式

    工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式.       工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在 ...

  5. 设计模式 | 工厂方法模式及典型应用

    工厂方法模式 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定将哪一个类实例化.工厂方法模式让一个类的实例化延迟到其子类. 工厂方法模式又简称为工厂 ...

  6. python工厂模式 django_python设计模式-工厂方法模式

    题目:假设你有一个 pizza 店,功能包括下订单.做 pizza,你的代码会如何写呢? def order_pizza(): pizza = Pizza() pizza.prepare() pizz ...

  7. 工厂方法模式_1天1个设计模式——工厂方法模式

    意图 工厂方法模式是一种创建型设计模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型. 问题 假设你正在开发一款物流管理应用.1.0版本只能支持处理卡车运输,因此大部分的代码都位 ...

  8. [设计模式] ------ 工厂方法模式

    工厂方法模式 手机厂造手机,肥皂厂造肥皂,药品厂造药品. 假设有一大类对象A1,A2,A3,A4-他们都有一个共同的父类A A1可以想成是手机,A2可以想成肥皂- (下面例子的A1Factory就是手 ...

  9. C#设计模式--工厂方法模式

    0.C#设计模式-简单工厂模式 设计模式: 工厂方法模式(Factory Method Pattern) 介绍:简单工厂模式是要在工厂类中通过数据来做个决策,在工厂类中的多个类中实例化出来其中一个要用 ...

最新文章

  1. X5同层播放器应用实践
  2. Java - 死锁 Dead Lock 定位分析
  3. Oracle存储过程procedure与函数function区别
  4. java substance下载,做出漂亮的Java界面–substance.jar的使用 | 学步园
  5. VTK:Points之ExtractEnclosedPoints
  6. 广度优先遍历算法-01寻找制高点问题
  7. Context 之我见
  8. 如何让循环里面语句执行完之后再去循环第二次_Go循环语句的使用
  9. mysql blob 字段,mysql BLOB字段类型用法介绍
  10. centos安装VirtualBox增强包VBoxGuestAdditions
  11. python抓包超星网课试卷_2020网络数据采集与Python爬虫【带实验】高校邦网课答案...
  12. 下一跳配置的原则--ensp
  13. 神调侃!程序员专属成长书单,我比女朋友更了解你!
  14. Python网络爬虫(一):爬虫基础
  15. linux的网络管理,Linux之网络管理
  16. 一款功能强大且专业好用的CAD图形创建工——corelcad 2021
  17. 皇家恩菲尔德子弹500经典男装
  18. 查询宿舍信息的c语言,学生宿舍管理系统 C语言编程
  19. c++ 三只小猪称体重(二)
  20. 傅立叶(逆)变换的计算

热门文章

  1. 抗体优化新方法:通过AI预测亲和力和自然度
  2. ​九州一轨通过注册:计划募资6.57亿 京投公司为大股东
  3. 计算机辅助设计基础及应用答案,计算机辅助设计基础与答案
  4. Windows 添加新用户,并授予该用户远程登录权限
  5. 青苹果影视系统源码/影视聚合/影视导航/影视点播网站源码
  6. bzoj 1251: 序列终结者 2011-12-20
  7. 杭师大校园网教职工(hznu-teacher 校园网账号)wifi 账号挖掘~仅供学习使用
  8. 关于面向对象的一次争论
  9. Unity Editor 知识点整理( MenuItem)
  10. JavaScript:实现PascalTriangle帕斯卡三角算法 (附完整源码)