百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python设计模式:工厂方法模式(python工厂函数有哪些)

off999 2024-10-27 11:57 43 浏览 0 评论

今日分享主题:Python 工厂方法模式

工厂,大家一般能想到的是生产产品的地方,在设计模式中,工厂可分为:简单工厂模式、工厂方法模式。在前期推文 Python 简单工厂模式 中有关于简单工厂模式的解读。

根据工厂的抽象程度可分为:工厂方法模式、抽象工厂模式。该模式用于封装和管理对象的创建,是一种创建型模式。


背景

在简单工厂模式中,只提供了一个工厂类,该工厂类处于对产品类进行实例化的中心位置,它知道每一个产品对象的创建细节,并决定何时实例化哪一个产品类。

简单工厂模式最大的缺点是:当有新产品要加入到系统中时,必须修改工厂类,加入必要的处理逻辑,这违背了“开闭原则”。
在简单工厂模式中,所有的产品都是由同一个工厂创建,工厂类职责较重,业务逻辑较为复杂,具体产品与工厂类之间的耦合度高,严重影响了系统的灵活性和扩展性,而工厂方法模式则可以很好地解决这一问题。因此工厂方法模式应运而生。


说明

(1)、工厂方法模式定义一个用于创建对象的接口,但是工厂本身并不负责创建对象,而是让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。工厂方法的创建是通过继承而不是通过实例化来完成的。

(2)、工厂方法模式就是简单工厂模式的进一步抽象。由于面向对象多态性,工厂方法模式保持了简单工厂的优点同时克服了它的缺点。工厂方法模式中,核心的工厂被提升为一个抽象类,将具体的创建工作交给他的子类完成。

这个抽象的工厂类仅规定具体工厂实现的接口,而不明确指出如何实例化一个产品类,这使得工厂方法模式允许系统在不修改原有产品结构的情况下轻松的引进新产品。

工厂方法使设计更加具有可定制性,它可以返回相同的实例或子类,而不是某种类型的对象。


Python 实现源码

 1from abc import ABCMeta,abstractmethod
 2
 3class Person(metaclass=ABCMeta):
 4    @abstractmethod
 5    def show(self):
 6        pass
 7
 8class ManOfPerson(Person):
 9    def show(self):
10        print("man show power")
11
12class WomanOfPerson(Person):
13    def show(self):
14        print("woman show beautiful")
15
16class ChildOfPerson(Person):
17    def show(self):
18        print("child show toy")
19
20
21class Family(metaclass=ABCMeta):
22    def __init__(self):
23        self.member=[]
24        self.createshow()
25
26    @abstractmethod
27    def createshow(self):
28        pass
29
30    def getmember(self):
31        return self.member
32
33    def addmember(self,oneperson):
34        self.member.append(oneperson)
35
36class TomFamily(Family):
37    def createshow(self):
38        self.addmember(ManOfPerson)
39        self.addmember(WomanOfPerson)
40
41class JimFamily(Family):
42    def createshow(self):
43        self.addmember(ManOfPerson)
44        self.addmember(ChildOfPerson)
45
46if __name__ == '__main__':
47    family_type=eval("TomFamily")()
48    print("create show ..",type(family_type).__name__)
49    print("family has member--",family_type.getmember())

执行结果

1create show .. TomFamily
2family has member-- [<class '__main__.ManOfPerson'>, <class '__main__.WomanOfPerson'>]
3

总结

前期分享的 Python 简单工厂模式 和今天分享的Python 工厂方法模式,大家在实际应用时能解决问题满足需求即可,可灵活变通,自由选择,无所谓哪种设计模式更高级。

同时无论哪种设计模式,由于可能封装了大量对象和工厂创建,当有新加入产品的需求时,需要修改已定义好的工厂相关的类,因此对于产品和工厂的扩展性不太友好,在选择使用时利弊需要权衡一下。

相关推荐

windows7安装版系统下载(win7安装版安装步骤)

1、win7系统装完后需要占用C盘空间10-15GB,如果把常用软件也安装到C盘,大小超过20+。  2、在分区的时候根据硬盘大小,如果硬盘相对较小,一般建议设置50G,最低不能低于30G。因...

韩剧网(韩剧网韩剧tv最新韩剧免费观看)

不收费,终身不收费~连续剧、综艺、歌曲,通通不要钱。之前好像是技术问题,现在恢复了。其它诸如人人视频、圈粉TV也都可以看韩剧哦。韩剧网有搜索页面的呀,搜索一下就可以了,不过好像《制作人》和玄彬的...

跳一跳游戏(跳一跳游戏是什么时候出来的)

GiveItUP《GiveItUP》是一款由Invictus推出的益智跑酷游戏。游戏与传统的跑酷类游戏最大的区别在于,游戏融入了高难度的节奏性挑战。红色火焰躲避技巧:红色火焰在游戏中是最常见的一个障碍...

什么是oa办公系统(办公oa系统的好处)

OA是OfficeAutomation的简写,就是办公自动化。所谓OA系统就是用网络和OA软件构建的一个单位内部的办公通信平台,用于辅助办公。OA系统完成单位内部的邮件通信、信息发布、文档管理、工作...

手机万能mp4转换器(手机万能mp4转换器下载)

1你需要先下载并安装一个叫格式工厂的软件。2然后打开->mp4。3点击添加文件的选项。4然后选择需要转换的视频,点击确定。5点击确定之后,再添加到转换列表中就可以。6再点...

迅雷beta官网(迅雷beta官方网)

若手机不能安装软件/游戏,建议:1.检查“未知来源”设置是否开启。2.查看下载的软件格式是否为机器所支持的。安卓系统手机支持的软件格式为.APK格式。3.下载软件时请阅读软件详情,查看是否对机器操作系...

私人家庭影院hd免费版游戏评测

《海上钢琴师》是由朱塞佩·托纳托雷执导,蒂姆·罗斯、比尔·努恩、梅兰尼·蒂埃里主演的剧情、音乐、爱情片。该片讲述了一个被命名为“1900”的弃婴在一艘远洋客轮上与钢琴结缘,成为钢琴大师的传奇故事。该片...

题库网(题库网站有哪些)

学科网的试卷有续费的和不需要交费的两类试卷,如果你是学科网的用户,可以下载试卷,还可以组卷,对于我们一线的老师来讲,这很方便的,只要学校肯出钱,在学科网前,全校的老师就可以注册免费试用学科,网上所有的...

类似迅雷的下载器有哪些(手机下载工具app)

推荐闪电下载和黑科技下载这两款APP手机上取代迅雷的下载器有闪电下载APP和黑科下载器APP等,以这两款为例,它们都是可以支持ed2k、磁力链等下载方式,也能够支持多种不同类似的文件的高速下载。、BT...

qq号申请免费注册官网(qq注册账号免费申请网址)

你好,通用的申请QQ号码的方法如下:1、首先打开腾讯官网。2、在腾讯页面左边的通信工具里面点击号码。3、点击号码以后就会进入QQ注册页面。4、进入QQ注册页面以后,在昵称后面输入要注册号码的名字。5、...

安卓安装windows(安卓安装apk解析包出错)

oppo手机支持安卓和Windows操作系统,但是双系统安装需要手机支持虚拟化技术(VT)。如果手机支持VT,可以在电脑上安装虚拟化软件,然后在手机上运行VT兼容的虚拟化应用程序,从而实现在电脑上安装...

安全中心下载(网易安全中心下载)

可以通过解除保护模式页面,查看QQ帐号进入保护模式的原因,及获取恢复QQ帐号正常使用的方法。点击小i,然后把自动登录选项去掉,打开safari,随便点一个网页,去登录。畅游经常这样抽风,可以关了游戏...

重装系统步骤(USB重装系统步骤)

正版的win10及以上系统,现在已经都自带系统重置功能,可以一键重置恢复到出厂设置。1.按住win+i,在弹出的windows设置对话框中,点击更新和安全选项,在弹出的设置对话框中,点击左侧的恢复选项...

qq群发软件手机版免费(qq群发软件安卓版免费下载)

分享一个可以免费试用的软件,“www.liaotiangou.com”在做微信营销的时候经常会需要使用到群发功能,出了多群群发之外,还有定时群发,甚至是定时发送朋友圈。多群群发可以解决以前最多只能群发...

小说排行榜2020前十名(耿美小说排行榜2020前十名)

1、元龙《元龙》是目前2020年哔哩哔哩国创动漫热门榜的第一名,讲述的是一名来自现代的王牌狙击手,穿越到了玄幻的元魂世界,从此展开的一系列热血的战斗与机遇,成为元魂世界的霸者的故事。2、灵笼《灵笼》是...

取消回复欢迎 发表评论: