ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

python设计模式 | 工厂模式

python设计模式 | 工厂模式 设计模式是一套代码设计经验, 这套经验已经进行过反复使用, 其目的在于重用代码, 在于让代码能够更容易被他人理解, 在于保证代码的可靠性。今天就给大家介绍一种常见的设计模式工厂模式用实现设计模式——工厂模式前言工厂模式, 按其名所示, 即我们能够借助一个指定的“工厂”来获取所需的“产品”, 于设计模式里, 主要被用于对抽象对象创建过程的处理, 以使得用户能够指定自身想要的对象, 而无需顾虑对象的实例化过程。如此行事的益处在于, 用户只用通过固定的接口而非直接去调用类的实例化方法, 进而获取一个对象的实例, 将实例创建过程的复杂性予以隐藏, 使生产实例与使用实例的代码实现解耦, 降低了维护的复杂程度。本文会给出实现三种工厂模式的简单例子, 所有代码均托管于上。简单工厂首先我们先看一个简单工厂的例子#utf-8所提供的内容存在代码格式且语义混乱等问题, 不太能明确准确逻辑进行改写。大致可尝试改为: 有一个类, 它被称作“梅赛德斯”, 在这个类里有一个方法, 这个方法返回“-奔驰” 然后又有一个名为宝马牌汽车所属车企类, 里面有个功能是直接返回“宝马”。 但原内容代码逻辑较乱, 此改写只是尽量基于现有混乱情况进行处理。要是我们存有两款“产品”, 一款是与BMW相关的汽车, 倘若不存在“工厂”用以制造它们, 那我们就得于代码里亲自去做实例化的举动, 就像这样: ()bmw BMW()但在实际情况当中, 你极有可能会遭遇到若干汽车产品, 并且每一个产品的构造参数皆不相同, 如此这般在开展创建实例的操作时便会遭遇困扰。就是在这样的时刻, 能够构造出来一个所谓的“简单工厂”, 将所有汽车呈现实例化的整个过程囊括并封装在其内部。class ():“简单工厂” , 以 “” 为起始, 定义含 “def” 且括号内有入参 “(name)” 的形式, 若 “name” 等于 “mb” , 则执行空括号 “()” 内的内容若 “name” 等于 “bmw” , 则执行 “BMW()”。存在类之后就能够借由朝着固定的接口传送参数收获意愿当中所期望获取到的对象实例, 情况如下:c1 .(mb)c2 .(bmw)工厂方法虽已有一简单工厂, 然于实际运用工厂之际, 我们会发觉新问题: 若我们欲新增一“产品”, 比如说Audi之汽车, 我们除新增一Audi类外, 还得修改内部之方法。如此便违背了软件设计里的开闭原则, 即于扩展新类之时, 尽量勿要修改原有代码。是以我们在简单工厂基础上将之举抽象成各异之工厂, 每个工厂对应生成自身产品, 此即工厂方法。#utf-8不太明确你提供的这段内容具体要表达什么准确意思, 从现有内容看比较缺乏关键信息和完整逻辑, 以下是尽量按照要求改写: 有一个被称为“抽象工厂”的, 等于abc的某个东西, 在这个里面有在某个地方被标记为abc的, 定义为自身的, 有着被称为“梅赛德斯工厂”的, 还有一个类, 它被叫做“宝马工厂”, 在这个类里面也有着定义为自身的, 有着BMW的。但这样改写后依然比较混乱且表意不明。我们将工厂予以抽象, 借助abc模块达成了一个抽象的基类, 如此一来, 便可借由特定的工厂获取特定的产品实例了。c1 ().()c2 ().()每个工厂承担着生产自身产品的职责, 如此一来, 避免了我们在增添产品之际致使修改工厂代码的情况发生, 而是只要增添适当的工厂就行, 比如, 若要新增一个Audi产品, 那么只需新增一个Audi类, 还有类。抽象工厂工厂方法虽说解决了咱们“修改代码”的难题, 然而要是咱们打算生产好多产品, 就会发觉咱们同样得编写好多相应的工厂类。比如说要是不但得生产小汽车, 而且还得生产SUV, 那么咱们采取工厂方法就得再多构造两个用于生产SUV的工厂类。所以为了处理这个问题, 咱们就得进而再去抽象工厂类, 使一个工厂能够生产同一类的多个产品, 这便是抽象工厂。具体实现情况如下:#utf-8我们使基类与此同时能够制造汽车以及SUV, 接着让继承并且重新编写以及方法就行。c1 ().()你提供的内容似乎并不是完整且正确的代码表述, 存在较多不明确的语法元素缺失等状况, 不太能按照准确要求进行改写。请你检查并补充完整准确的内容。最大的区别存在于, 抽象工厂模式跟工厂方法模式之间, 其中抽象工厂内有的一个工厂对象, 他将负责多个不同产品对象的创造与生成, 并且在这样的方式之下, 是要比工厂方法模式更为简易、更具效率的。结论一开始接触设计模式的时候, 会在三种工厂模式的实际运用方面遇上比较让人困惑的状况, 实际上呢, 这三种模式各自有着优点和缺点, 它们所应用的场景也并不是完全一样的:当需创建的对象数量较少从而不会造成工厂方法里的业务逻辑过度复杂, 并且用户仅仅关心被创建的是哪种类型的实例, 而并不关注其初始化过程时, 例如出现多种数据库像 MySQL/ 这种的实例、多种格式文件的解析器 比如 XML/JSON 等, 简单工厂模式是适用的。工厂方法模式继承了简单工厂模式的优点并且还有所改进, 它并非借助一个工厂类来负责所有产品的创建, 而是把具体的创建工作交付给相应的子类去执行, 这就使得工厂方法模式能够让系统实现更有效的扩展。在实际应用当中, 能够用来达成系统的日志系统之类的, 像是具体的程序运行日志, 网络的日志, 数据库的日志等等, 都能够借助具体的工厂类予以创建。那个抽象工厂模式, 是在工厂方法的基础之上, 扩展了工厂对多个产品创建的支持, 也就更加适宜一些大型的系统, 例如是系统里面有着多于一个的产品族, 并且这些产品族类的产品需要去实现同样的接口, 就好像许多软件系统界面里不同主题之下不同的按钮, 文本框, 字体等等。
返回列表