当前位置: 首页 > wzjs >正文

天津南开做网站h5设计工具

天津南开做网站,h5设计工具,大连零基础网站建设教学电话,怎么上传网站源码1. 什么是享元模式? 享元模式是一种结构型设计模式,旨在通过共享对象来减少内存使用和提高性能。它特别适用于需要大量相似对象的场景,通过共享相同的对象来避免重复创建,从而节省内存和提高效率。 享元模式的核心思想是将对象的…

1. 什么是享元模式?

享元模式是一种结构型设计模式,旨在通过共享对象来减少内存使用和提高性能。它特别适用于需要大量相似对象的场景,通过共享相同的对象来避免重复创建,从而节省内存和提高效率。

享元模式的核心思想是将对象的状态分为两部分:

  1. 内部状态(Intrinsic State):对象的共享部分,通常是不可变的,多个对象可以共享这些状态。
  2. 外部状态(Extrinsic State):对象的非共享部分,通常是可变的,依赖于具体的上下文或环境。

享元模式通常包含以下几个组成部分:

  • 享元接口(Flyweight Interface):定义享元对象的接口,通常包含一个方法来接受外部状态。
  • 具体享元(Concrete Flyweight):实现享元接口,存储内部状态,并可以接受外部状态。
  • 享元工厂(Flyweight Factory):负责创建和管理享元对象,确保共享相同的享元实例。
class Shape:def draw(self, color):passclass Circle(Shape):def __init__(self, radius):self.radius = radius  # 内部状态(共享部分)def draw(self, color):print(f"Drawing a {color} circle with radius {self.radius}")class ShapeFactory:def __init__(self):self.shapes = {}  # 存储共享的圆形对象def get_circle(self, radius):if radius not in self.shapes:self.shapes[radius] = Circle(radius)  # 创建新的圆形对象return self.shapes[radius]  # 返回共享的圆形对象if __name__ == "__main__":factory = ShapeFactory()# 创建并共享相同半径的圆circle1 = factory.get_circle(5)circle1.draw("red")  # 外部状态(颜色)circle2 = factory.get_circle(5)circle2.draw("blue")  # 外部状态(颜色)circle3 = factory.get_circle(10)circle3.draw("green")  # 外部状态(颜色)# 验证 circle1 和 circle2 是同一个对象print(f"circle1 is circle2: {circle1 is circle2}")  # 输出: True
  • 内部状态(Intrinsic State):在这个示例中,Circle 类的 radius 属性是内部状态,它是共享的,多个 Circle 对象可以共享相同的半径。
  • 外部状态(Extrinsic State):在 draw 方法中,颜色参数是外部状态,它是可变的,依赖于具体的上下文或环境。
  1. 享元接口Shape 类定义了享元对象的接口,包含一个 draw 方法。

  2. 具体享元类

    • Circle 类实现了 Shape 接口,存储内部状态(半径)并实现 draw 方法。
    • radius 是内部状态(Intrinsic State),它是共享的,多个 Circle 对象可以共享相同的半径。
  3. 享元工厂

    • ShapeFactory 类负责创建和管理享元对象。它使用一个字典来存储已经创建的圆形对象,确保相同半径的圆形对象被共享。
    • 当请求一个圆形时,如果该半径的圆形已经存在,则返回共享的对象;否则,创建一个新的对象并存储。
  4. 客户端代码

    • 在客户端代码中,创建 ShapeFactory 实例并请求圆形对象。
    • circle1circle2 共享相同的半径(5),但可以使用不同的颜色(外部状态)进行绘制。
    • 通过 circle1 is circle2 的比较,可以验证这两个对象实际上是同一个对象。

享元模式在软件设计中具有多种优点:

  • 节省内存:通过共享对象,减少了内存的使用。对于大量相似对象的场景,享元模式可以显著降低内存占用。

ShapeFactory 类负责管理 Circle 对象的创建。每当请求一个圆形时,如果该半径的圆形已经存在,则返回共享的对象;否则,创建一个新的对象并存储。通过这种方式,如果多个圆形对象具有相同的半径,它们将共享同一个 Circle 实例,而不是为每个对象创建一个新的实例。这显著减少了内存的使用。

class ShapeFactory:def __init__(self):self.shapes = {}  # 存储共享的圆形对象def get_circle(self, radius):if radius not in self.shapes:self.shapes[radius] = Circle(radius)  # 创建新的圆形对象return self.shapes[radius]  # 返回共享的圆形对象
  • 提高性能:减少了对象的创建和销毁,提高了性能。共享对象的使用可以减少系统的负担,提升响应速度。

创建和管理 Circle 对象的逻辑被集中在 ShapeFactory 中。由于相同半径的圆形对象只会被创建一次,后续的请求将直接返回已存在的对象。这里,circle1circle2 实际上是同一个对象。通过避免重复创建相同的对象,享元模式减少了系统的负担,从而提高了性能。

circle1 = factory.get_circle(5)
circle2 = factory.get_circle(5)
  • 灵活性:可以根据需要动态地添加新的享元对象,而不影响现有对象的状态。

ShapeFactory 中,新的 Circle 对象可以根据需要被创建并存储。每当请求一个新的半径时,工厂会检查是否已经存在相应的对象。这种设计允许系统在运行时灵活地添加新的享元对象,而不需要修改现有的对象或逻辑。这种灵活性使得系统能够适应变化的需求。

def get_circle(self, radius):if radius not in self.shapes:self.shapes[radius] = Circle(radius)  # 创建新的圆形对象return self.shapes[radius]  # 返回共享的圆形对象

2. 示例1:音频播放器中的享元模式

# 享元接口
class Audio:def play(self):pass# 具体享元类
class MP3(Audio):def __init__(self, file_path):self.file_path = file_path  # 内部状态(共享部分)def play(self):print(f"Playing audio from: {self.file_path}")# 享元工厂
class AudioFactory:def __init__(self):self.audios = {}  # 存储共享的音频对象def get_audio(self, file_path):if file_path not in self.audios:self.audios[file_path] = MP3(file_path)  # 创建新的音频对象return self.audios[file_path]  # 返回共享的音频对象# 客户端代码
if __name__ == "__main__":factory = AudioFactory()# 创建并共享相同文件路径的音频对象audio1 = factory.get_audio("song1.mp3")audio1.play()  # 播放音频audio2 = factory.get_audio("song1.mp3")audio2.play()  # 播放相同的音频audio3 = factory.get_audio("song2.mp3")audio3.play()  # 播放不同的音频# 验证 audio1 和 audio2 是同一个对象print(f"audio1 is audio2: {audio1 is audio2}")  # 输出: True
Playing audio from: song1.mp3
Playing audio from: song1.mp3
Playing audio from: song2.mp3
audio1 is audio2: True
  1. 享元接口Audio 类定义了音频对象的接口,包含一个 play 方法。

  2. 具体享元类

    • MP3 类实现了 Audio 接口,存储内部状态(文件路径)并实现 play 方法。
    • file_path 是内部状态(Intrinsic State),它是共享的,多个 MP3 对象可以共享相同的文件路径。
  3. 享元工厂

    • AudioFactory 类负责创建和管理享元对象。它使用一个字典来存储已经创建的音频对象,确保相同文件路径的音频对象被共享。
    • 当请求一个音频时,如果该文件路径的音频已经存在,则返回共享的对象;否则,创建一个新的对象并存储。
  4. 客户端代码

    • 在客户端代码中,创建 AudioFactory 实例并请求音频对象。
    • audio1audio2 共享相同的文件路径(song1.mp3),但可以独立播放。
    • 通过 audio1 is audio2 的比较,可以验证这两个对象实际上是同一个对象。

文章转载自:

http://7gC7wF1z.chmkt.cn
http://rAE7JNjR.chmkt.cn
http://gda0VXxH.chmkt.cn
http://zeHWCF2u.chmkt.cn
http://iQoJKGOT.chmkt.cn
http://VMWNnZEb.chmkt.cn
http://u7g3AC9s.chmkt.cn
http://ld3hT3XI.chmkt.cn
http://jSgR9PZT.chmkt.cn
http://Kc9Ap0q1.chmkt.cn
http://9ggdENcV.chmkt.cn
http://jiTuny7t.chmkt.cn
http://JTztcK57.chmkt.cn
http://eeN5LuAK.chmkt.cn
http://ulemsJuY.chmkt.cn
http://toGDY3gZ.chmkt.cn
http://0dV4hTUV.chmkt.cn
http://kQp2ttD0.chmkt.cn
http://5kIZgSDa.chmkt.cn
http://XeED1haG.chmkt.cn
http://tN4Z11JR.chmkt.cn
http://o9pdABOY.chmkt.cn
http://YnzXwAbf.chmkt.cn
http://OaxBm3ps.chmkt.cn
http://zijxn2mo.chmkt.cn
http://WExDwYYf.chmkt.cn
http://9NxZ31RV.chmkt.cn
http://FjcxTtza.chmkt.cn
http://f5M7xBxf.chmkt.cn
http://lAKKI04Q.chmkt.cn
http://www.dtcms.com/wzjs/652747.html

相关文章:

  • 响应式网站几个断点高校网站建设的优势和不足
  • 重庆公司做网站怎样做游戏网站
  • 成都建站哪家好app商城网站开发
  • 拖拽建站系统源码在地税网站怎么做税种认定
  • 做网站需求山东建站商城
  • 网站的弹窗对话框怎么做网站建设公司百家号
  • 网站怎么升级建设网站培训学校
  • 学习制作网页的网站263企业邮箱下载客户端
  • .net网站开发实训体会容桂销售型网站建设
  • 网站购物车功能怎么做广东新闻联播
  • 建站服务论坛高端品牌名称
  • 中国网站建设市场分析沧州网站建设制作
  • 上海企业体检宁波seo推荐优化
  • 网站建设 需求分析报告网站备案查询平台
  • 西工网站建设设计网络编辑
  • 昆明做网站比较牛的合肥微信网站制作
  • 上海网站建设口碑好做网站怎么做鼠标跟随
  • 济南网站免费制作网站设计客户对接流程
  • 西安网站建站泰宁县建设局网站
  • 信誉好的常州网站建设网站视频下载软件
  • 苏州营销型网站制作公司国外建站企业
  • 网站数据不变重新安装wordpress大连app开发制作
  • 龙岩城乡建设局网站网站积分的作用
  • 个人备案网站做企业网可以吗给别人做金融网站 犯法吗
  • 长域名的优秀网站山西省建设银行网站
  • wordpress如何生成网站地图现在做外贸还能挣钱吗
  • 手机有软件做ppt下载网站有哪些内容吗店铺销售系统软件哪个好
  • 南阳锐诚网站建设手机建设银行网站进不去
  • 站长之家官网网址编程python适合多大孩子学
  • 网站与服务器的关系写作网站大全