享元模式

设计模式--享元模式

风格不统一 提交于 2019-11-29 06:37:31
文章目录 1. 概述 2. 代码解析 3. 源码使用 1. 概述 2. 代码解析 public interface Employee { void report ( ) ; } public class Manager implements Employee { private String department ; // 内部状态 private String reportContent ; // 外部状态 public Manager ( String department ) { this . department = department ; } public void setReportContent ( String reportContent ) { this . reportContent = reportContent ; } @Override public void report ( ) { System . out . println ( reportContent ) ; } } /** * 享元模式: * 1. 减少创建对象的次数. * 2. 内部状态:就是不通过外部修改、传入的属性. * 3. 外部状态:就是通过外部修改值, 影响对象的属性. */ public class EmployeeFactory { private static Map <

设计模式

纵饮孤独 提交于 2019-11-28 15:30:16
目录 一、创建型模式 1. 单例模式 1.1请手写一个单例 1.2单例模式的优点和应用? 1.3单例模式的缺点 2. 工厂类相关模式 2.1工厂模式、简单工厂模式、抽象工厂模式 2.2工厂模式的优点和应用 2.3工厂模式的不足 3、建造者模式 3.2建造者模式的优点和使用场景 3.3建造者模式的缺点 4、原型模式 4.1原型模式 4.2原型模式的优点和使用场景 4.3原型模式的缺点 二、结构类设计模式 1、适配器模式 1.1适配器模式 1.2适配器模式的优点和使用场景 2、桥接模式 2.1桥接模式 2.2桥梁模式的优点和应用场景 3、 装饰器模式 3.1对装饰器的理解 ,并写出一个计时器记录方法执行性能的装饰器? 3.2装饰器模式的优点和应用场景 3.3装饰器模式的缺点 4、组合模式 4.1组合模式 4.2组合模式的优点和使用场景 4.3组合模式的缺点 5、门面模式 5.1门面模式 5.3门面模式的缺点 6、享元模式 6.1享元模式 6.2享元模式的优点和使用场景 6.3享元模式的缺点 7、代理模式 7.1代理模式 7.2代理模式的优点和使用场景 7.3代理模式的缺点 三、行为类设计模式 1、策略模式 1.1策略模式 1.2策略模式的优点和应用场景 1.3策略模式的缺点 2、责任链模式 2.1责任链模式 2.2责任链模式的优点和应用场景 2.3责任链模式的缺点 3、 命令模式 3

设计模式简介及常用应用场景

有些话、适合烂在心里 提交于 2019-11-28 12:48:42
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。 常用应用场景: 工厂模式 :IOC就是典型的工厂模式 代理模式 :AOP就是代理实现的 Facade模式 :shiro框架的核心 单例模式 Spring默认就是单例 不变模式 string 八大基本数据类型都是单例 Future 模式 异步调用。即请求时只拿到一个契约,约定以后可以获取这个东西 来源: https://www.cnblogs.com/duguangming/p/11407721.html

java设计模式----享元模式

若如初见. 提交于 2019-11-27 23:51:42
当一个应用中使用了大量的对象,会造成内存开销大,对象的大部分状态和参数(内部状态)都是相同的时候,可以使用享元模式。使用享元模式可以使这些对象都共享相同的实例。降低存储开销,而对象之间的不同的状态参数(外部状态)则使用外部参数传入来实现。 单纯的享元模式涉及到的角色主要有三个。 抽象享元角色:给出一个抽象接口,以规定具体享元角色需要实现的方法。 具体享元角色:实现抽象享元角色的接口,如果有内蕴状态(具体变量)的话,必须负责为内蕴状态提供存储空间(对其进行保存或者将值赋给新生成一个变量)。 享元工厂:负责创建和管理享元角色。此工厂需保证享元对象可以被系统适当地共享。当一个客户端对象调用一个享元对象的时候,享元工厂角色会检查系统中是否已经有一个符合要求的享元对象。如果已经有了,享元工厂角色就应当提供这个已有的享元对象;如果系统中没有一个适当的享元对象的话,享元工厂角色就应当创建一个合适的享元对象。 可以发现享元模式是简单工厂模式的包装,只是使用场景不一样。 java总的String类型的变量就是享元模式的实现。 具体实现代码如下: 新建一个抽象享元角色抽象接口: package flyWeight; public interface FlyWeight { public void operate(String s); } 再建一个具体享元角色: package flyWeight;

享元模式(十二)

梦想与她 提交于 2019-11-27 05:51:06
主要用于减少创建对象的数量,以减少内存占用和提高性能 尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象 换句话说就是共享对象,在某些对象需要重复创建,且最终只需要得到单一结果的情况下使用 菜鸟案例: 我们将创建一个 Shape 接口和实现了 Shape 接口的实体类 Circle。下一步是定义工厂类 ShapeFactory。 ShapeFactory 有一个 Circle 的 HashMap,其中键名为 Circle 对象的颜色。无论何时接收到请求,都会创建一个特定颜色的圆。ShapeFactory 检查它的 HashMap 中的 circle 对象,如果找到 Circle 对象,则返回该对象,否则将创建一个存储在 hashmap 中以备后续使用的新对象,并把该对象返回到客户端。 FlyWeightPatternDemo,我们的演示类使用 ShapeFactory 来获取 Shape 对象。它将向 ShapeFactory 传递信息(red / green / blue/ black / white),以便获取它所需对象的颜色。 重点 :减少重复对象的创建,没有再创建,有就可以用有的对象 图例还是需要分开看,再进行合并 很正常的 Shape 接口和它的一个实现类 Circle mian 方法就是执行的头,里面还有三个方法,就是颜色,X,Y 这它创建了一个工厂

003-结构型-07-享元模式(Flyweight)

◇◆丶佛笑我妖孽 提交于 2019-11-26 14:24:56
一、概述   提供了减少对象数且从而改善应用所需的对象结构的方式。运用共享技术有效地支持大是细粒度的对象。   它通过与其他类似对象共享数据来减小内存占用。它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。   使用共享对象的方法,用来尽可能减少内存使用量以及分享资讯。通常使用工厂类辅助,不需要多次创建重复实例。   享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用。 1.1、适用场景   常常应用于系统底层的开发,以便解决系统的性能问题。   系统有大量相似对象、需要缓冲池的场景。 比如:String常量池、Integer常量池、数据库连接池、线程池 1.2、优缺点 优点: 减少对象的创建,降低内存中对象的数量,降低系统的内存,提高效率 减少内存之外的其他资源占用 缺点: 关注内/外部状态、关注线程安全问题 使系统、程序的逻辑复杂化 模式对比 享元模式和代理模式 代理模式生成的代理类,可以使用享元模式来生成代理类。 享元模式和单例模式 享元模式可以再次创建对象,也可以取缓存对象。单例模式则是严格控制只有一个实例对象。

享元模式入门解读

六眼飞鱼酱① 提交于 2019-11-26 14:20:32
应用场景:大量对象持有的固定的公共部分 比如说地森林渲染 假设我们 每棵树都有 树网格,树干纹理,树叶纹理,位置,光照,树皮颜色,树叶颜色...... 当大批量产生时不可能说为每棵树都定制纹理,网格这些 所以把比如固有的 (树网格和树枝纹理,树叶)提取出来 从 class Tree { private: Mesh mesh_; Texture bark_; Texture leaves_; Vector position_; double height_; double thickness_; Color barkTint_; Color leafTint_; }; 更替为 class TreeModel { private: Mesh mesh_; Texture bark_; Texture leaves_; }; class Tree { private: TreeModel* model_; Vector position_; double height_; double thickness_; Color barkTint_; Color leafTint_; }; 这样每棵树都指向了固定的实例 不再是自己持有一个完全的实例 关于如何提取固有的部分,游戏编程模式中把这种区域统称为"与上下文无关" 这很重要哈哈 作为享元模式的入门理解,若有错误请各位观众老爷指出错误 来源:

设计模式之(十二)享元模式(Flyweight)

≡放荡痞女 提交于 2019-11-26 10:55:54
享元模式思想     就以小时候导锅来说吧(导锅是我家乡的方言,就是用细沙把一个模型锅的形状拓下来,然后把铝水倒进模型中,就导好一个锅了。小时候很喜欢看的,可惜现在看不到了。上个图片回忆下)了解了这个过程后就知道,沙子、模型锅、都是可以一直使用的。而用做化铝水的物品是需要不同铝制品东西化生成。做这个生意的人不可能用一次沙子和模型锅就因为用过不用了。   在代码的世界里,那些不变的类属性就像这些沙子和模型锅可以共享使用,而变化的类属性就像为导锅化铝水的铝制品一样是不同变化的。但实际上很多程序员就没有共享那些不变属性,而是生成一个类,就新建一个这样的可共享属性。就如同导锅用了一次的锅和沙子就弃之不用了,下次再用新的一样,多么可笑的事情啊,而享元模式就是为了阻止我们干这样可笑的蠢事而生的。      来看下共享模式的定义: 运用共享技术有效地支持大量细粒度的对象,达到节省内存的目的。 咋一看不太明白这句话的意思,其实就是本文开篇描述的那个意思。 享元模式结构 模式参与成员:   Flyweight: 享元抽象接口   FlyweightFactory: 管理共享享元对象的缓存池。   ConcreteFlyweight: 可共享的类,里面存放着都是不会随着场景变化而变化的状态,同时介绍不可共享的状态的传入。   Client: 模拟试用享元对象的地方(对享元模式来说就是客户端) 例子  

13.设计模式之十一:享元模式【结构型模式】

假装没事ソ 提交于 2019-11-25 21:22:52
在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题。创建那么多的对象将会耗费很多的系统资源,它是系统性能提高的一个瓶颈。例如,围棋和五子棋中的黑白棋子,图像中的坐标点或颜色,局域网中的路由器、交换机和集线器,教室里的桌子和凳子等。这些对象有很多相似的地方,如果能把它们相同的部分提取出来共享,则能节省大量的系统资源,这就是享元模式的产生背景。 定义与特点 享元(Flyweight)模式的定义:运用共享技术来有効地支持大量细粒度对象的复用。它通过共享已经存在的又橡来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。 享元模式的主要优点是:相同对象只要保存一份,这降低了系统中对象的数量,从而降低了系统中细粒度对象给内存带来的压力。 其主要缺点是: 为了使对象可以共享,需要将一些不能共享的状态外部化,这将增加程序的复杂性。 读取享元模式的外部状态会使得运行时间稍微变长。 结构与实现 享元模式中存在以下两种状态: 内部状态,即不会随着环境的改变而改变的可共享部分; 外部状态,指随环境改变而改变的不可以共享的部分。享元模式的实现要领就是区分应用中的这两种状态,并将外部状态外部化。下面来分析其基本结构和实现方法。 模式的结构 享元模式的主要角色有如下。 抽象享元角色(Flyweight):是所有的具体享元类的基类,为具体享元规范需要实现的公共接口