Spring常用设计模式--工厂方法模式
本专栏内容参考自:咕泡学院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常用设计模式--工厂方法模式相关推荐
- 4. 星际争霸之php设计模式--工厂方法模式
题记 ============================================================================== 本php设计模式专辑来源于博客(jy ...
- java 工厂方法_java设计模式-工厂方法模式
1.工厂方法(FactoryMethod)模式的定义 定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中.这满足创建型模式中所要求的"创建与使用相分离" ...
- JAVA设计模式 - 工厂方法模式
工厂方法模式(Factory Pattern) 是一种创建型设计模式 , 它是Java中最常用的设计模式之一 . 1 . 工厂方法模式的定义 定义一个创建对象的接口 , 让子类决定实例化哪一个类 . ...
- Java设计模式—工厂方法模式抽象工厂模式
工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式. 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在 ...
- 设计模式 | 工厂方法模式及典型应用
工厂方法模式 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定将哪一个类实例化.工厂方法模式让一个类的实例化延迟到其子类. 工厂方法模式又简称为工厂 ...
- python工厂模式 django_python设计模式-工厂方法模式
题目:假设你有一个 pizza 店,功能包括下订单.做 pizza,你的代码会如何写呢? def order_pizza(): pizza = Pizza() pizza.prepare() pizz ...
- 工厂方法模式_1天1个设计模式——工厂方法模式
意图 工厂方法模式是一种创建型设计模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型. 问题 假设你正在开发一款物流管理应用.1.0版本只能支持处理卡车运输,因此大部分的代码都位 ...
- [设计模式] ------ 工厂方法模式
工厂方法模式 手机厂造手机,肥皂厂造肥皂,药品厂造药品. 假设有一大类对象A1,A2,A3,A4-他们都有一个共同的父类A A1可以想成是手机,A2可以想成肥皂- (下面例子的A1Factory就是手 ...
- C#设计模式--工厂方法模式
0.C#设计模式-简单工厂模式 设计模式: 工厂方法模式(Factory Method Pattern) 介绍:简单工厂模式是要在工厂类中通过数据来做个决策,在工厂类中的多个类中实例化出来其中一个要用 ...
最新文章
- X5同层播放器应用实践
- Java - 死锁 Dead Lock 定位分析
- Oracle存储过程procedure与函数function区别
- java substance下载,做出漂亮的Java界面–substance.jar的使用 | 学步园
- VTK:Points之ExtractEnclosedPoints
- 广度优先遍历算法-01寻找制高点问题
- Context 之我见
- 如何让循环里面语句执行完之后再去循环第二次_Go循环语句的使用
- mysql blob 字段,mysql BLOB字段类型用法介绍
- centos安装VirtualBox增强包VBoxGuestAdditions
- python抓包超星网课试卷_2020网络数据采集与Python爬虫【带实验】高校邦网课答案...
- 下一跳配置的原则--ensp
- 神调侃!程序员专属成长书单,我比女朋友更了解你!
- Python网络爬虫(一):爬虫基础
- linux的网络管理,Linux之网络管理
- 一款功能强大且专业好用的CAD图形创建工——corelcad 2021
- 皇家恩菲尔德子弹500经典男装
- 查询宿舍信息的c语言,学生宿舍管理系统 C语言编程
- c++ 三只小猪称体重(二)
- 傅立叶(逆)变换的计算
热门文章
- 抗体优化新方法:通过AI预测亲和力和自然度
- ​九州一轨通过注册:计划募资6.57亿 京投公司为大股东
- 计算机辅助设计基础及应用答案,计算机辅助设计基础与答案
- Windows 添加新用户,并授予该用户远程登录权限
- 青苹果影视系统源码/影视聚合/影视导航/影视点播网站源码
- bzoj 1251: 序列终结者 2011-12-20
- 杭师大校园网教职工(hznu-teacher 校园网账号)wifi 账号挖掘~仅供学习使用
- 关于面向对象的一次争论
- Unity Editor 知识点整理( MenuItem)
- JavaScript:实现PascalTriangle帕斯卡三角算法 (附完整源码)