西拉免费代理IP

你当前的位置:西拉免费代理IP   >   新闻中心   >   设计模式之简单工厂模式

设计模式之简单工厂模式

来源: 西拉IP   作者: 张祁无   2018年12月13日 15:16

工厂,顾名思义,能够生产产品的一个地方。产品,在面向对象中,就是类的实例。所以,“工厂”就是一个能够产生其它类型的对象的类。工厂类设计模式主要有三种,即简单工厂模式,工厂模式,抽象工厂模式三种。本文主要介绍简单工厂模式。由于其简单,很多人都不会将其列为一种设计模式。

简单工厂模式是指专门定义一个工厂类来负责创建产品类的实例,被创建的产品通常都具有共同的父类。

设计模式之简单工厂模式

该设计模式包含三个角色:

简单工厂(SimpleProductFactory)角色:工厂模式的核心,负责生产具体的产品。工厂类可以被外部用户即客户端调用,创建产品对象,从而实现外部用户即客户端和产品对象的解耦。

抽象产品(Product)角色:简单工厂模式所创建的具体产品对象的父类,负责描述所有产品对象的共有特征。

具体产品(Concrete Product)角色:是指具体的产品,是客户端调用工厂的目的就是获取产品对象,在工厂模式中通常拥有多个具体产品。一般来讲是抽象产品类的子类,实现了抽象产品类中定义的所有接口方法。

可以通过一个例子更好的理解上述内容:

我们有一个水果基类Fruit(抽象产品角色),包涵produce方法 。有两个子类Apple和Banana(具体产品角色),重写produce方法。还有一个工厂类。工厂类(简单工厂角色)有fruitProduce的方法,输入参数为水果的名称。

客户端使用工厂类,通过调用fruitProduce方法来生产水果。

Python代码如下:

设计模式之简单工厂模式

有了水果工厂,外部用户即客户端就可以使用水果工厂生成水果了:

设计模式之简单工厂模式

那么,简单工厂模式的应用场景呢?对象的创建比较复杂的时候,就可以考虑使用简单工厂模式来实现。

简单工厂模式优点:客户端与工厂进行交互,不再负责生产具体的产品对象,从而实现了解耦合。(单一职责,实现了解耦合)。

简单工厂模式缺点:由于这个工厂类负责全部的具体产品的创建,那么具体产品类特别多时,我们就需要去修改工厂的代码,从而增大了维护难度,这样就违反了设计模式经典的开闭原则。

阅读 525   

相关推荐

应用程序接口(API) 应用程序接口(API)
应用程序接口(API)

应用程序接口(API)是   允许两个软件程序彼此通信的代码。 API定义了开发人员编写从操作系统(OS)或其他应用程序请求服务的程序的正确方法。API  由动词和名词组成的函数调用实 . . .

2018年12月14日
Netscape Server应用程序编程接口(NSAPI)

NSAPI(Netscape服务器应用程序编程接口)是一个( 应用程序接口 ),随Netscape Web服务器一起提供,通过扩展服务器功能,帮助开发人员构建更快,更复杂 . . .

2018年12月14日
Adaptive Server Enterprise(ASE)

Adaptive Server Enterprise(ASE)是关系数据库管理系统(RDBMS),可在Linux和其他基于Unix的操作系统,Windows NT和Windows 2000以及Ma . . .

2018年12月14日
一道微软面试题 一道微软面试题
一道微软面试题

面试题目是这样子的: 两个单词如果包含相同的字母,次序不同,则称为字母易位词(anagram)。例如,“silent”和“listen”是字母易位词,而“apple”和“ap . . .

2018年12月14日
webshell你不知道的那些事 webshell你不知道的那些事
webshell你不知道的那些事

1.利用md5绕过waf的一句话 本体: 本质 利用方式 MD5("3fion0hj596569 . . .

2018年12月14日
谷歌搜索重返中国按下暂停键,CEO 皮查伊“对决”美国国会 谷歌搜索重返中国按下暂停键,CEO 皮查伊“对决”美国国会
谷歌搜索重返中国按下暂停键,CEO 皮查伊“对决”美国国会

在经历了今年 “Project Maven”项目和“蜻蜓”计划的道德滑坡的声讨过后,Google 公司仍旧“流年不顺”。 先是 Google Cloud 的三位女 . . .

2018年12月13日
如履薄冰:Redis 懒惰删除的巨大牺牲 如履薄冰:Redis 懒惰删除的巨大牺牲
如履薄冰:Redis 懒惰删除的巨大牺牲

大家都知道 Redis 是单线程的,但是 Redis 4.0 增加了懒惰删除功能,懒惰删除需要使用异步线程对已删除的节点进行内存回收,这意味着 Redis 底层其实并不是单线程,它内部还有 . . .

2018年12月13日
45K!刚面完 AI 岗,这几点分享给你! 45K!刚面完 AI 岗,这几点分享给你!
45K!刚面完 AI 岗,这几点分享给你!

互联网虽然寒冬,但人工智能热度不减,成果不断。今年所有的互联网公司,都在ALL in AI。百度、腾讯、阿里巴巴、京东等互联网巨头甚至都在美国硅谷大肆高薪挖掘人工智能人才。 . . .

2018年12月13日
一个中年“码农”的困局 一个中年“码农”的困局
一个中年“码农”的困局

01 杨俊是一个70后,个头中等,略微发福,戴着一副厚如啤酒瓶底的眼镜,眼神犀利,一看就是个精明人。 杨俊年轻时就读于国内一所211院校的计算机系,写得一手好代 . . .

2018年12月13日
什么是高速缓存代理? 什么是高速缓存代理?
什么是高速缓存代理?

高速缓存代理是一种Internet /网络高速缓存技术 ,它使 代理服务器 能够保存最近和频繁的网站/网页请求以及一台或多台客户机请求的数据。 . . .

2018年12月12日

新闻中心 代理分享 | 蜘蛛地图

全网最大的免费网页代理ip平台,提供大量免费http代理服务器免费ip代理地址

© 2016 - 2021. 西拉免费代理ip, All rights reserved. 鄂ICP备18017015号-4

在线客服