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

5种创建型设计模式python极简示例和应用价值

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

创建型设计模式是面向对象程序设计中用于处理对象创建机制的设计模式,旨在在不明确指定具体类的情况下创建对象。这些模式增加了程序的灵活性和代码的复用性。

添加图

片注释,不超过 140 字(可选)

1. 单例模式(Singleton Pattern)

单例模式确保一个类只有一个实例,并提供一个全局访问点。

class Singleton:
    _instance = None

    @classmethod
    def getInstance(cls):
        if cls._instance is None:
            cls._instance = Singleton()
        return cls._instance

# 用法
s1 = Singleton.getInstance()
s2 = Singleton.getInstance()
print(s1 == s2)  # 输出 True,s1 和 s2 是同一个实例 

应用价值

  • 资源管理:单例模式常用于管理共享资源,如数据库连接、文件系统等,确保资源在应用程序中只有一个访问点。
  • 配置管理:用于应用程序的配置管理,确保配置信息在整个应用中保持一致和同步。
  • 性能优化:通过减少对象创建和销毁的次数,减少内存开销,提高性能。

实际示例

  • 在应用程序中,例如日志记录器(logger)通常实现为单例,以确保所有的日志操作都使用同一个日志处理实例。
  • 系统的配置管理器,确保应用程序在多个模块和组件间共享同一配置设置。

2. 工厂模式(Factory Pattern)

工厂模式用于创建对象,允许接口创建对象,但由子类决定要实例化的类是哪一个。工厂方法让类的实例化推迟到子类进行。

class Button:
    def paint(self):
        pass

class WindowsButton(Button):
    def paint(self):
        print("Render a button in a Windows style.")

class MacOSButton(Button):
    def paint(self):
        print("Render a button in a MacOS style.")

class ButtonFactory:
    def create_button(self, os_type):
        if os_type == "Windows":
            return WindowsButton()
        elif os_type == "MacOS":
            return MacOSButton()

# 用法
factory = ButtonFactory()
button = factory.create_button("Windows")
button.paint()  # 输出:Render a button in a Windows style.

应用价值

  • 封装创建逻辑:将对象的创建逻辑封装在一个单独的接口或类中,简化客户端代码,使客户端与具体的产品解耦。
  • 支持新类型的动态引入:允许在不修改现有代码的情况下引入新的对象类型,增加程序的灵活性。
  • 代码复用:通过使用统一的接口创建对象,减少代码重复。

实际示例

  • 一个应用程序支持多种不同类型的数据库连接(如 MySQL、Oracle、PostgreSQL),可以使用工厂模式来创建与特定数据库系统对应的连接对象。
  • GUI应用程序中,根据不同操作系统来创建适应各个系统的UI元素

3. 抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

工厂模式专注于单一产品(按钮),而抽象工厂涉及产品族(按钮和滚动条),展示了抽象工厂在管理多种产品类型方面的能力。工厂模式每个工厂类只创建一种产品,而抽象工厂模式的每个工厂类可以创建多个不同种类的产品(产品族)。在工厂模式中,增加新的产品需要增加新的工厂类,适合产品种类较多但是产品类别不频繁增加的情况。而抽象工厂模式易于增加新的产品族,但是增加新的产品功能则需要修改抽象工厂的接口,适合产品族扩展的需求。

class Button:
    def paint(self):
        pass

class ScrollBar:
    def paint(self):
        pass

class WindowsButton(Button):
    def paint(self):
        print("Render a button in a Windows style.")

class MacOSButton(Button):
    def paint(self):
        print("Render a button in a MacOS style.")

class WindowsScrollBar(ScrollBar):
    def paint(self):
        print("Render a scrollbar in a Windows style.")

class MacOSScrollBar(ScrollBar):
    def paint(self):
        print("Render a scrollbar in a MacOS style.")

class GUIFactory:
    def create_button(self):
        pass

    def create_scrollbar(self):
        pass

class WindowsFactory(GUIFactory):
    def create_button(self):
        return WindowsButton()
    
    def create_scrollbar(self):
        return WindowsScrollBar()

class MacOSFactory(GUIFactory):
    def create_button(self):
        return MacOSButton()

    def create_scrollbar(self):
        return MacOSScrollBar()

# 用法
factory = WindowsFactory() if os_type == "Windows" else MacOSFactory()
button = factory.create_button()
scrollbar = factory.create_scrollbar()
button.paint()  # 输出:Render a button in a Windows style.
scrollbar.paint()  # 输出:Render a scrollbar in a Windows style.

应用价值

  • 产品家族的一致性:确保一系列相关的产品设计到一起使用,而不必担心创建错误的对象。
  • 系统的分层:允许系统分层,使复杂系统的管理和维护更加模块化。
  • 增强程序的可扩展性:提供新的工厂和产品类族,而无需更改现有代码,使得系统更加灵活。

实际示例

  • 跨平台的UI框架,如Qt或wxWidgets,使用抽象工厂模式生成不同操作系统下的窗口和控件。
  • 在电子商务应用中,为不同地区或不同类型的用户创建不同的产品组合和促销策略。

4. 原型模式(Prototype Pattern)

原型模式用于创建重复的对象,同时又能保证性能。这种模式实现了一个原型接口,该接口用于创建当前对象的克隆。

class Prototype:
    def __init__(self, name):
        self.name = name

    def clone(self):
        return copy.deepcopy(self)

# 用法
prototype = Prototype("原型")
cloned_prototype = prototype.clone()
print(prototype.name)  # 输出 "原型"
print(cloned_prototype.name)  # 输出 "原型"
print(prototype is cloned_prototype)  # 输出 False

应用价值

  • 性能优化:原型模式允许复制已有的实例,避免了新实例的创建成本,特别是在复杂对象的初始化非常资源密集时尤为有效。
  • 动态加载和实例化:对象可以在运行时动态加载并创建其复制品,提高系统的灵活性。
  • 减少子类的构造:原型模式减少了子类的构造,因为克隆过程可以替代子类的工作。

实际示例

  • 在游戏开发中,原型模式常用于创建复杂的对象,如游戏中的怪物或NPC,这些对象一旦被定义就可以被多次实例化。
  • 文档编辑器中,原型模式可以用于复制和粘贴功能

5. 建造者模式(Builder Pattern)

建造者模式用于创建一种复杂的对象,它的组成部分可以一步步被构造。此模式允许你使用相同的构建过程创建不同的表示。

class Dialog:
    def __init__(self, title, cancelable=False):
        self.title = title
        self.cancelable = cancelable

    def show(self):
        print(f"显示对话框:标题为{self.title},是否可取消:{self.cancelable}")

class DialogBuilder:
    def __init__(self):
        self.title = ""
        self.cancelable = False

    def set_title(self, title):
        self.title = title
        return self

    def set_cancelable(self, cancelable):
        self.cancelable = cancelable
        return self

    def build(self):
        return Dialog(self.title, self.cancelable)

# 用法
builder = DialogBuilder()
dialog = builder.set_title("我的对话框").set_cancelable(True).build()
dialog.show()  # 显示对话框:标题为我的对话框,是否可取消:True

应用价值

  • 构建复杂对象:允许逐步构建复杂对象,并允许按步骤明确地构造对象的不同部分。
  • 控制细节的隐藏:客户端不需要知道内部的构建细节,建造者独立于对象的创建和表示。
  • 提供变体:相同的构建过程可以创建不同的表示或设计,提高系统的灵活性。

实际示例

  • 在软件工程中,复杂对象的构建,如HTML或SQL查询构建器,可以利用建造者模式来分步骤构建不同的部分。
  • Android开发中,AlertDialog的创建常用建造者模式,允许动态设置标题、内容、按钮等。

相关推荐

安全教育登录入口平台(安全教育登录入口平台官网)

122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...

大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)

大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...

谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)

要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...

2026-02-04 09:03 off999

电信宽带测速官网入口(电信宽带测速官网入口app)

这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...

植物大战僵尸95版手机下载(植物大战僵尸95 版下载)

1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...

免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)

1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...

2025世界杯赛程表(2025世界杯在哪个国家)

2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...

下载搜狐视频电视剧(搜狐电视剧下载安装)

搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...

pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
永久免费听歌网站(丫丫音乐网)

可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...

音乐格式转换mp3软件(音乐格式转换器免费版)

有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...

电子书txt下载(免费的最全的小说阅读器)

1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...

最好免费观看高清电影(播放免费的最好看的电影)

在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...

孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)

要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...

取消回复欢迎 发表评论: