博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python设计模式(一):工厂方法与抽象工厂及应用场景
阅读量:5918 次
发布时间:2019-06-19

本文共 1519 字,大约阅读时间需要 5 分钟。

工厂方法与抽象工厂是否傻傻分不清,力求以最简单和最直接的方式来理解模式设计,毕竟模式的初衷是化繁为简,就该用最简单的方式来理解。

示例code:

工厂模式

# -*- coding:utf-8 -*- class A:     def __init__(self):         self.word = "运行A"     def run(self):         print(self.word) class B:     def __init__(self):         self.word = "运行B"     def run(self):         print(self.word) def Interface(classname):     """     工厂模式接口函数     :param classname:     :return:     """     run = dict(A=A, B=B)     return run[classname]() if __name__ == '__main__':     test1 = Interface('A')     test1.run()     test2 = Interface('B')     test2.run()          结果:    运行A    运行B    

抽象工厂模式:

# -*- coding:utf-8 -*- class A:     def __init__(self):         self.word = "运行A"     def run(self):         print(self.word) class B:     def __init__(self):         self.word = "运行B"     def run(self):         print(self.word) class Interface:     """     抽象工厂模式接口类     :param classname:     :return:     """     def __init__(self, classname=None):         self.test = classname     def run(self):         self.test().run() if __name__ == '__main__':     test1 = Interface()     test1.test = A     test1.run()     test1.test = B     test1.run()     结果:    运行A    运行B

抽象工厂:创建一系列相关或相互依赖抽象出来的的对象接口Interface,不需要具体指明实例化A类或B类

工厂方法:定义一个用于创建对象的接口函数Interface,让子类决定实例化哪一个类A或者B

抽象工厂、工厂方法异同比较:抽象工厂实例化的类在接口方法里已经通过字典方式例举出来了,也就是不是实例化A就是B,但是抽象工厂实例化的类未知,可以在抽象接口类里传入A或者B,也可以新建一个C类传入。

类本身就是对象的抽象,但是抽象工厂是对类的抽象,相同方法、相同属性的归并。

2019-03-12-17_39_40.png

2019-03-12-17_39_41.png

如上图,抽象工厂有两个方法生产车架和制造轮胎,但是他没有指定是生产那种牌子的,上图有两种牌子:飞鸽自行车、永久自行车,也就可以增加一个凤凰自行车等等。工厂模式里面就指定了飞鸽厂和永久厂,并且这两个厂只能生产各自对应的轮胎。

转载地址:http://jibvx.baihongyu.com/

你可能感兴趣的文章
玩深度学习选哪块英伟达 GPU?有性价比排名还不够!
查看>>
微软年度股东大会传达好消息 前两任CEO盖茨和鲍尔默未出席
查看>>
对于银行业与政府来说,监管科技的挑战和机遇有哪些?
查看>>
野蛮生长已到尽头 WiFi百家争鸣谁能破局
查看>>
JavaScript Web云平台OS.js介绍
查看>>
光伏业面临生死挑战 企业该如何“亮剑”?
查看>>
320亿美元收购ARM出价过高?软银股价跌幅超10%
查看>>
网络安全公司Sift Science 获 3000 万美元 C 轮融资
查看>>
上海 借助排污许可制度有望建成环保大数据库
查看>>
任正非自称不如钱伯斯!钱伯斯究竟是何许人?
查看>>
7月26日云栖精选夜读:MySQL金融版线上发布会:它为什么是金融企业的首选,技术大佬、产品和神秘嘉宾本位“演绎”...
查看>>
Proximus进行首次5G测试 计划部署VoLTE以及4.5G
查看>>
台积电或抢先量产新一代7纳米芯片
查看>>
Wi-Fi断流坑坏队友:联发科处理器又出事
查看>>
事件溯源与流处理的对比
查看>>
美联储被盯上了?国会“严重担忧”联储网络漏洞
查看>>
台积电:2018年之前不决定是否把工厂迁美
查看>>
无语!没想到你是这样的Win10:竟然有这么低级的Bug!
查看>>
中国信息化发展首超G20国家平均水平
查看>>
交通优化需求下 智能交通迎来386.8亿美元市场规模
查看>>