首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏desperate633

    设计模式模式(flyweight模式)引入模式模式的实例程序模式分析

    引入模式 模式的实例 模式的分析 引入模式 flyweight是轻量级的意思,指的是拳击比赛中选手体重最轻的等级。顾名思义,设计模式就是为了是对象更轻。 模式和单例模式有点像。 虽然依赖注入机制并不是使用的flyweight模式,但思想上会有相似之处。 模式的实例程序 我们假设我们有1,2,3,4,5,6,7,8,9的几个字符图形,这些字符对象就是大对象。 ? image.png 模式分析 ? image.png •Flyweight — 描述一个接口,通过这个接口Flyweight可以接受并作用于外部状态。 模式的特点: 会对多个地方产生影响 由于实例是共享的,如果修改一个实例,就会对多给对方产生影响

    53120发布于 2018-08-22
  • 来自专栏一Li小麦

    模式

    模式 (flyweight)模式是一种用于性能优化的模式,“fly”在这里是苍蝇的意思,意为蝇量级。模式的核心是运用共享技术来有效支持大量细粒度的对象。 这个例子便是模式的雏形,模式要求将对象的属性划分为内部状态与外部状态(状态在这里通常指属性)。 使用小结 我们可以尝试提炼模式的实质:实现模式的关键是把内部状态和外部状态分离开来,它的实现过程就是剥离外部状态。 模式和单例模式有什么区别? 在这种场景下习惯上仍然被称为模式。 但是如果去掉外部状态,你的对象池就有可能会变得异常庞大,那就不是模式了。

    57010发布于 2019-11-19
  • 来自专栏java闲聊

    模式

    概述 概念 模式通过共享,用来尽可能减少内存使用量,运用共享技术有效地支持大量细粒度的对象 作用:减少创建对象的数量,以减少内存占用和提高性能 UML类图 代码栗子 模式中有三种角色 抽象角色 具体角色 工厂角色 具体角色 public class ExamSite { private String id; 道路名称 */ private String name; /** * 路况 */ private String road; } 抽象角色 * 定义池对象 */ private static Map<String, ExamSite> pool = new HashMap<>(); /** * 工厂 细颗粒的对象都具备较接近的外部状态,而且内部状态与环境无关 缓冲池的场景 栗子 JDK中 String的设计 参考资料 书籍《设计模式之禅》

    49810发布于 2019-03-19
  • 来自专栏nummy

    模式

    模式通过共享对象来实现减少内存的使用。 所以这里使用模式,只用创建一个BrowserImage对象即可。

    36510发布于 2018-08-27
  • 来自专栏码上遇见你

    模式

    来解决 好了我们直接步入正题....... ---- 模式 基本概念 模式(FlyWeight Pattern)又叫蝇量模式,运用共享技术有效支撑大量细粒度的对象 常用于系统底层开发,解决系统性能问题 模式经典的使用场景就是池技术,String常量池、数据库连接池、缓冲池等都是模式的应用。模式是池技术的重要实现方式。 模式原理类图 对原理图的说明-即(模式的角色及职责) FlyWeight:是一个抽象的角色,它是产品的抽象类,同时定义出对象的外部状态和内部状态的接口或实现。 ,这样就很好的解决了对象的开销问题 ---- 好了关于模式的理论知识就讲到这里了,接下来我们使用模式来解决一下针对上面所提到的需求(网站的展现项目)吧。 总结 模式的注意事项和细节: 在模式这样理解,“”就表示共享,“”表示对象 系统中有大量对象,这些对象消耗大量内存,并且对象的状态大部分可以外部化时,我们就可以考虑选用模式 用唯一标识码判断

    34320编辑于 2023-06-28
  • 来自专栏软件开发 -- 分享 互助 成长

    模式

    一、简介 1、模式运用共享技术有效地支持大量细粒度的对象。 2、模式是为了减少同种类的实例化,以达到节省内存的目的。 抽象的接口使得变得可能,但是并不强制子类实行共享,因此并非所有的对象都是可以共享的。 具体类(ConcreteFlyweight) 具体类实现了抽象类所规定的接口。 对象的内蕴状态必须与对象所处的周围环境无关,从而使得对象可以在系统内共享。有时候具体类又称为单纯具体类,因为复合类是由单纯具体角色通过复合而成的。 5、所属类别:结构型 二、C++程序 1 // 模式.cpp : 定义控制台应用程序的入口点。 show(); 62 63 cout<<websitefactory->cout()<<endl; 64 return 0; 65 } 程序中使用了,三个营销,但是有只有两个种类,使用模式只实例化两个对象

    71890发布于 2018-02-05
  • 来自专栏Howl同学的学习笔记

    模式

    团建去吃火锅了,回来没时间写笔记,发篇以前写过的设计模式把 1. 模式 模式是一个重用现有对象来减少内存占用和提高性能的模式,有点类似单例模式,但是可以创建多个不同的对象。 String 的缓存池,数据库的数据池都是模式的体现 模式的组成: Flyweight: 对象(下面举例的dog对象) IntrinsicState: 共享内部状态(name 是共享的) ExtrinsicState : 每个对象的外部状态各不同(say 是不同的) 2. 过程 2.1 接口 public interface Animal { void say(String say); } 2.2 对象 public class Dog implements String say) { System.out.println("I am dog " + name + ", i want to say: " + say); } } 2.3 工厂

    30310编辑于 2022-05-09
  • 来自专栏余林丰

    模式

    模式核心掌握的一点就是——共享。如果一个程序代码中存在大量细粒度的对象,而这些大量的对象造成了很大的存储开销时就应该考虑使用。 我们将具体的类抽象成一个接口。 f.getFlyweight("Y"); 17 fx.operation(--extrinsicstate); 18 } 19 20 } 这样我们就实现了一个最简的模式 ,给出模式的定义:运用共享技术有效地支持大量细粒度对象。 那什么时候能考虑使用模式呢?

    72450发布于 2018-01-09
  • 来自专栏给永远比拿愉快

    模式

    with other similar objects 中文定义:模式运用共享技术有效地支持大量细粒度的对象。 模式UML图(来自Google图片) ? 抽象(Flyweight)角色:是给实现提供的接口。 模式使用场景(摘自《大话设计模式》) 在襄垣对象内部并且不会随环境改变而改变的共享部分,可以称为是对象的内部状态,随环境改变而改变的、不可以共享的状态就是外部状态了。 在Java中,String类型就是使用了模式。String对象是final类型,对象一旦创建就不可改变。 模式源码示例 模式原型 public abstract class FlyWeight { public abstract void operation(int state); } public

    50220发布于 2019-01-22
  • 来自专栏Czy‘s Blog

    模式

    模式 模式Flyweight Pattern主要用于减少创建对象的数量,以减少内存占用和提高性能,其提供了减少对象数量从而改善应用所需的对象结构的方式,模式尝试重用现有的同类对象,如果未找到匹配的对象 模式正是为解决这一类问题而诞生的,模式通过共享技术实现相同或相似对象的重用。 在模式中通常会出现工厂模式,需要创建一个工厂来负责维护一个池Flyweight Pool用于存储具有相同内部状态的对象。 在模式中共享的是对象的内部状态,外部状态需要通过环境来设置。 使用模式需要维护一个存储对象的池,而这需要耗费资源,因此应当在多次重复使用对象时才值得使用模式

    48700发布于 2020-10-26
  • 来自专栏JusterZhu

    模式

    1.概要 模式是一种结构型设计模式,它的主要思想是共享对象以减少内存使用和提高性能。在该模式中,共享的对象被设计为可共享的,即它们可以在多个上下文中被共享,而不需要在每个上下文中都创建新的实例。 模式通过共享相似对象的部分状态来实现内存的节省。 实现方式通常包括两个关键部分: 工厂(Flyweight Factory):负责创建和管理共享的对象。 在请求对象之前,它会检查是否已经有符合要求的对象存在,如果存在则返回已有对象,否则创建新对象并加入池。 具体(Concrete Flyweight):实现接口,在具体场景中被共享的对象。 适用场景 系统中存在大量相似对象,占用大量内存。 缺点 需要额外的管理对象的工厂,增加了系统的复杂度。 对象的外部状态需要外部管理,可能影响系统的一致性。 模式适用于需要大量相似对象的场景,通过共享对象来节省内存和提高性能。

    32910编辑于 2023-10-07
  • 来自专栏生如夏花的个人博客

    模式

    模式 模式定义 运用共享技术有效的支持大量粒度的对象 优点 如果系统有大量类似的对象,可以节省大量的内存及cpu资源 实现 import java.util.Map; import java.util.concurrent.ConcurrentHashMap

    21310编辑于 2022-05-05
  • 来自专栏mingmingcome’s cnblogs

    模式

    2019年5月14日22:13:58 模式(flyweight pattern) 定义 模式(Flyweight),运用共享技术有效地支持大量细粒度的对象。 ——《设计模式:可复用面向对象软件的基础》 Flyweight在拳击比赛中指最轻量级,即“蝇量级”和“雨量级”,这里使用“模式”的意译,是因为这样更能反映模式的用意。 ——《JAVA与模式模式是对象结构型模式之一,此模式通过减少对象的数量,从而改善应用程序所需的对象结构。 使用场景 我们在需要创建大量(例如10^5)的相似的对象时,使用模式。 为什么在这个例子中使用模式?因为我们需要减少玩家对象的数量,所以使用模式。如果我们不使用模式,当有n个玩家玩CS,那么我们需要创建n个对象。 总结 模式使用共享技术有效地支持大量细粒度的对象,减少内存中对象的数量。 模式有内部状态和外部状态,内部状态可以共享,外部状态作为参数传入。 完 2019年5月19日22:13:48

    38020发布于 2021-11-29
  • 来自专栏向治洪

    模式

    模式 如果在一个系统中存在多个相同的对象,那么只需共享一份对象的拷贝,而不必为每一次使用都创建新的对象。这里可以看出,模式是对象的结构模式模式以共享的方式高效地支持大量的细粒度对象。 概述 模式采用一个共享来避免大量拥有相同内容对象的开销。这种开销最常见、最直观的就是内存的损耗。 模式分类 模式可以分成单纯模式和复合模式两种形式。 单纯模式 在单纯的模式中,所有的对象都是可以共享的。用uml图表示如下: ? 单纯模式涉及到的角色: 抽象(Flyweight)角色 :给出一个抽象接口,以规定出所有具体角色需要实现的方法。 将一些单纯使用合成模式加以复合,形成复合对象。

    62190发布于 2018-02-05
  • 来自专栏Vincent-yuan

    设计模式~模式

    模式是对象的结构模式模式以共享的方式高效的支持大量的细粒度对象。 对象能做到共享的关键是区分内蕴状态(Internal State)和外蕴状态(External)。 对象的外蕴状态必须由客户端保存,并在对象被创建之后,在需要使用的时候再传入对象内部。 外蕴状态不可以影响对象的内蕴状态。也就是说,它们是相互独立的。 模式的种类 单纯模式 复合模式 单纯模式 ? 角色如下: 抽象角色:此角色是所有具体类的超类,为这些类规定出需要实现的公共接口。 对象的内蕴状态必须于对象所处的周围环境无关,从而使得对象可以在系统内共享。 工厂角色(FlyweightFactory): 本角色负责创建和管理角色。 复合模式

    42220发布于 2020-08-25
  • 来自专栏浮躁的喧嚣

    设计模式 -- 模式

    如果系统中因为创建了大量类似的对象而导致内存占用过高,模式就非常有用了,模式通过共享技术实现相同或相似对象的重用,存储这些共享实例对象的地方称为池(Flyweight Pool) 因为要求细粒度对象 ,并且不会随环境改变而改变的状态 外部状态:随环境改变而改变的、不可以共享的状态 模式类图 模式类图 Flyweight(抽象类):通常是一个接口或抽象类,在抽象类中声明了具体类公共的方法 ,池一般设计为一个存储“键值对”的集合(也可以是其他类型的集合),可以结合工厂模式进行设计;当用户请求一个具体对象时,首先从池中获取,如果池中不存在,则创建一个新的对象返回给用户,并在池中保存该新增对象 缺点 模式使得系统变得复杂,需要分离出内部状态和外部状态,这使得程序的逻辑复杂化 为了使对象可以共享,模式需要将对象的部分状态外部化,而读取外部状态将使得运行时间变长 使用场景 一个系统有大量相同或者相似的对象 ,造成内存的大量耗费 对象的大部分状态都可以外部化,可以将这些外部状态传入对象中 在使用模式时需要维护一个存储对象的池,而这需要耗费一定的系统资源,因此,应当在需要多次重复使用对象时才值得使用模式

    31210编辑于 2023-11-22
  • 来自专栏技术趋势

    设计模式-模式

    模式是什么? 定义:模式(Flyweight Pattern)属于结构型模式一种,主要用于大量减少创建对象的数量,以减少内存占用和提高性能。 它提供了减少对象数量从而改善应用所需的对象结构的式,但是提高了系统的复杂性,需要模式分享出内部状态和外部状态,而且外部状态是固有特性,内部状态是随系统改变而改变,一般模式+工厂模式+单例模式一起使用 ,并不是所有的对象都可以共享,非共享的对象通常是对象的组合对象; FlyweightFactory:工厂类,主要用来创建并管理共享的对象,并对外提供访问共享的接口; 模式可以干嘛 模式类图 ? 模式的核心在于通过一个工厂,用户每次需要创建对象的时候,首先去工厂进行查找,若存在则直接返回给用户,若不存在则创建后放到池子中,以便下次使用。

    47920发布于 2020-09-18
  • 来自专栏技术与生活

    设计模式-模式

    由于模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种对象结构型模式模式从字面上翻译是“蝇量级模式”,其实并不太好理解。 ,模式横空出世。 而模式里面一个重要的地方是池,里面装满了各种对象。这里可以看出模式的“”是共享,“”代表公共对象的最原始的状态。 先来看下模式的类图: ? 通常我们可以结合单例模式来设计具体类,为每一个具体类提供唯一的对象。 (3) 在使用模式时需要维护一个存储对象的池,而这需要耗费一定的系统资源,因此,应当在需要多次重复使用对象时才值得使用模式

    48920发布于 2018-09-12
  • 来自专栏c++与qt学习

    设计模式---模式

    模式 模式定义 动机 角色 模式结构 模式扩展 单纯模式 复合模式 模式与其他模式的联用 模式分析 数据库连接池简单模拟 模式应用 String中的模式 Integer 中的模式 单纯模式 单纯模式:在单纯模式中,所有的对象都是可以共享的,即所有抽象类的子类都可共享,不存在非共享具体类。 :" + (fly1 == fly2)); } } ---- 模式与其他模式的联用 在模式工厂类中通常提供一个静态的工厂方法用于返回对象,使用 简单工厂模式来生成对象; 在一个系统中,通常只有唯一一个工厂,因此工厂类可以使用单例模式进行设计; 模式可以结合组合模式形成复合模式,统一对对象设置外部状态。 ---- 参考文章 深入理解模式 设计模式 | 模式及典型应用

    37010发布于 2021-11-15
  • 来自专栏Java架构师必看

    设计模式——模式

    4、模式经典的应用的场景就是池技术,String 常量池、数据库连接池、缓冲池等等都是模式的应用,模式是池技术的重要实现方式。 二、模式的特点 ---- 模式的主要优点:相同对象只要保存一份,降低了系统中对象的数量,从而降低了系统中细粒度对象给内存带来的压力。 模式的主要意图:运行模式有效地支持大量细粒度对象。 四、模式结构类图 ---- 模式的主要角色如下: 1)、抽象角色(Flyweight):是所有的具体类的基类,为具体规范需要实现的公共接口,非的外部状态以参数的形式通过方法传入 五、模式案例分析 ---- 模式在五子棋中的应用:包含多个内部状态 “黑” 和 “白” 颜色的棋子和外部状态 棋子的坐标 ,所以适合模式、 【1】抽象角色:棋子(ChessPieces)

    43230发布于 2021-05-14
领券