设计模式:工厂方式模式、抽象工厂模式
前言
在面向对象程序设计中,工厂通常是一个用来创建其他对象的对象。工厂是构造方法的抽象,用来实现不同的分配方案。
工厂方法模式
工厂方法模式(英语:Factory method pattern)是一种实现了“工厂”概念的面向对象设计模式。就像其他创建型模式一样,它也是处理在不指定对象具体类型的情况下创建对象的问题。工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。”
根据定义可以知道,工厂方法模式的实质是定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。类的实例在子类中进行。
首先创建一个创建对象的接口ProgrammeFactory
public interface ProgrammeFactory {Video getVideo();
}
只有一个方法用于获取各类语言的教学视频,再定义两个子类去实现它
// 获取Java语言的教学视频
public class JavaProgrammeFactory implements ProgrammeFactory {@Overridepublic Video getVideo() {System.out.println("获取Java视频教程");return new JavaVideo();}}// 获取Python语言的教学视频
public class PythonProgrammeFactory implements ProgrammeFactory {@Overridepublic Video getVideo() {System.out.println("获取Python视频教程");return new PythonVideo();}}
测试代码
public class FactoryMethodDemo {public static void main(String[] args) {ProgrammeFactory factory = new JavaProgrammeFactory();factory.getVideo();factory = new PythonProgrammeFactory();factory.getVideo();}
}
工厂方法模式适用场景:
- 创建对象需要大量重复代码
- 客户端(应用层)不依赖与产品类实例如何被创建、实现等细节
- 一个类通过其子类来指定创建哪个对象
工厂方法模式优点:
- 用户只需关心所需要产品对应的工厂,无需关心创建的细节
- 加入新产品符合开闭原则,提供可扩展性
工厂方法模式缺点:
- 类的个数容易过多,增加复杂性
- 增加了系统的抽象性和理解难度
完整代码:工厂方法模式
抽象工厂模式
抽象工厂模式(英语:Abstract factory pattern)是一种软件开发设计模式。抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。在正常使用中,客户端程序需要创建抽象工厂的具体实现,然后使用抽象工厂作为接口来创建这一主题的具体对象。客户端程序不需要知道(或关心)它从这些内部的工厂方法中获得对象的具体类型,因为客户端程序仅使用这些对象的通用接口。抽象工厂模式将一组对象的实现细节与他们的一般使用分离开来。
抽象工厂模式主要用来解决产品族的问题。比如工厂模式中提到的两种语言,不止有教学视频,还有文章等,如此一来,就可以分为:Java视频、Java文章、Python视频、Python文章四种产品。其中Java视频和Java文章属于同一产品族,Python视频和Python文章属于同一产品族。而Java视频和Python视频属于不同产品族的同一产品等级,Java文章和Python文章也是如此。这时便要用到抽象工厂模式
首先创建一个创建对象的接口ProgrammeFactory
public interface ProgrammaFactory {Video getVideo();Article getArticle();
}
有两个方法用于获取视频教程和文章教程(同一产品族),再定义两个子类去实现它
// 获取Java产品族的工厂
public class JavaProgrammaFactory implements ProgrammaFactory {public Video getVideo() {System.out.println("获取Java视频教程");return new JavaVideo();}public Article getArticle() {System.out.println("获取Java文章教程");return new JavaArticle();}
}// 获取Python产品族的工厂
public class PythonProgrammaFactory implements ProgrammaFactory {public Video getVideo() {System.out.println("获取Python视频教程");return new PythonVideo();}public Article getArticle() {System.out.println("获取Python文章教程");return new PythonArticle();}
}
测试代码
public class FactoryMethodDemo {public static void main(String[] args) {ProgrammaFactory factory = new JavaProgrammaFactory();factory.getVideo();factory.getArticle();factory = new PythonProgrammaFactory();factory.getVideo();factory.getArticle();}}
抽象工厂模式适用场景:
- 客户端(应用层)不依赖产品类实例如何被创建、实现等细节
- 强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量重复的代码
- 提供一个产品类的库,所有产品以同样的接口出现,从而使客户端不依赖与具体实现
抽象工厂模式优点:
- 具体产品在应用层代码隔离,无需关心创建细节
- 将一个系列的产品族统一到一起创建
抽象工厂模式缺点:
- 规定了所有可能被创建的产品集合,产品族中扩展新的产品等级困难,需要修改抽象工厂的接口
- 增加了系统的抽象性和理解难度
完整代码:抽象工厂模式
总结
工厂方法模式和抽象工厂模式都是用来创建对象的设计模式。调用者无需知道对象被创建的具体过程,对调用者来说工厂类就是一个黑盒。
工厂方法模式中,每个工厂只能生产一类产品,而抽象工厂模式中,每个工厂可以生产一系列产品。
设计模式:工厂方式模式、抽象工厂模式相关推荐
- JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·抽象工厂——理解“开放封闭”
JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·抽象工厂--理解"开放封闭" 一个不简单的简单工厂引发的命案 在实际的业务中,我们往往面对的复杂度并非数个类 ...
- Head First设计模式读书笔记四 简单工厂 工厂模式 抽象工厂模式
本文示例代码材料源自Head First设计模式 以前整理自己整理的链接: 工厂模式 https://blog.csdn.net/u011109881/article/details/56541580 ...
- 设计模式---(3)抽象工厂模式
抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最 ...
- Java设计模式—工厂方法模式抽象工厂模式
工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式. 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在 ...
- 【Java设计模式】简单学抽象工厂模式——你好,微信还是支付宝
目录 说明 实现方式 自问自答 其他链接 说明 五大创建型模式之一,其他还有单例模式.原型模式.建造者模式.工厂模式. 抽象工厂模式(Abstract Factory Pattern):定义了一个in ...
- 设计模式(二)抽象工厂模式
抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最 ...
- 设计模式:工厂方法与抽象工厂模式
说明:这篇blog写的很好,有助于理解工厂方法与抽象工厂模式的联系与区别. 原文链接:http://blog.csdn.net/yzxz/article/details/4601152 抽象工厂模式与 ...
- 研磨23种大话设计模式------简单工厂模式 + 工厂方法模式 + 抽象工厂模式
大家好,我是一位在java学习圈中不愿意透露姓名并苟且偷生的小学员,如果文章有错误之处,还望海涵,欢迎多多指正 如果你从本文 get 到有用的干货知识,请帮忙点个赞呗,据说点赞的都拿到了offer 简 ...
- 【设计模式】Unity3D 简单工厂、工厂(方法)、抽象工厂模式
创建型模式-工厂三兄弟 提示:个人学习总结,如有错误,敬请指正 文章目录 创建型模式---工厂三兄弟 一.简单工厂模式 1.简单工厂模式是什么? 2.UML图 3.实现方式 二.工厂(方法)模式 1. ...
- 2.5万字详解23种设计模式—创建型模式(简单工厂、工厂方法、抽象工厂、单例-多线程安全详解、建造者、原型)的详细解读、UML类图
本文简述了各大设计模式,并通过UML和代码详细说明.本文大约共 2.5W 字,建议收藏.下方是本文的目录: 一.设计模式的认识 二.设计模式的分类 根据其目的 根据范围 三.设计模式的优点 四.设计模 ...
最新文章
- 3年前的一个小项目经验,分享给菜鸟兄弟们(公文收发小软件:小技能 DeleteMark)...
- 递归函数练习——累乘
- 程序员编码能力差,竟是睡眠不足惹的祸?!
- OpenCV探索之路——图像形态学处理(膨胀、腐蚀、开运算、闭运算)
- python求两组同学的平均成绩_Python学习心得2:求平均值
- phpstorm2017破解方法
- 项目管理甘特图模板_甘特图简易制作流程
- mcc、mbuild和mex命令详解
- 贪吃蛇html网页小游戏,JavaScript贪吃蛇,网页在线版贪食蛇游戏
- python 答题插件_大话西游答题器 Python版本
- outlook移动ost邮箱数据到D盘
- 给定三角形边长,求三角形面积
- 小程序直播带货系统优势—直播带货的技巧
- 植物神经紊乱会不会导致失眠
- 在一种特殊情况下损坏了wav音频文件,修复的方法
- Chu序列的特性及仿真说明(2020_11_3更新)
- OpenCV中的图像处理 —— 图像阈值+图像平滑+形态转换
- 京东开源项目之列表解决方案Drip-Table
- MySQL长途售票系统_基于SSH的长途汽车票务售票系统的设计(Struts2,MySQL)(含录像)...
- 余世维成功经理人视频