python设计模式(一):工厂方法与抽象工厂及应用场景
工厂方法与抽象工厂是否傻傻分不清,力求以最简单和最直接的方式来理解模式设计,毕竟模式的初衷是化繁为简,就该用最简单的方式来理解。
示例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类传入。
类本身就是对象的抽象,但是抽象工厂是对类的抽象,相同方法、相同属性的归并。
如上图,抽象工厂有两个方法生产车架和制造轮胎,但是他没有指定是生产那种牌子的,上图有两种牌子:飞鸽自行车、永久自行车,也就可以增加一个凤凰自行车等等。工厂模式里面就指定了飞鸽厂和永久厂,并且这两个厂只能生产各自对应的轮胎。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
C# 定时关机小程序
C# 定时关机小程序 1.打开VS2019,创建界面和按钮 2. 代码如下: private void button1_Click(object sender, EventArgs e) { downpc(txttime.Text); } private static void downpc(string time) { Process.Start("shutdown", "/s /t "+time); } private void button2_Click(object sender, EventArgs e) { Process.Start("shutdown", "-a"); } private void Form1_Load(object sender, EventArgs e) { } private void LinkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { System.Diagnostics.Process.Start("https://www.cnblogs.com/pi...
- 下一篇
python设计模式(二):建造者模式
建造者,顾名思义是修建建筑的工人,按照基本的施工方式:打桩-浇筑框架-砌墙-装修,同样的施工流程却能造就千差万别的建筑,因为不同的材料、不同设计,可以表现出千差万别,这就是建造者模式的简要理解。 示例代码: #-*-coding:utf-8-*-classBuilder(): """建造流程:原料—施工""" def__init__(self): self.materiel=None self.design=None defrun(self): print('修建完工!设计建筑:%s|购买原料:%s'%(self.design,self.materiel))classA(Builder): """方案A,修建毛坯房""" defget_materiel(self): self.materiel="砖瓦" defget_design(self): self.design="毛坯房"classB(Builder): """方案B,修建写字楼""" defget_materiel(self): self.materiel="玻璃" defget_design(self): self.desi...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Linux系统CentOS6、CentOS7手动修改IP地址