享元模式

享元模式

核能气质少年 提交于 2019-12-15 04:46:49
享元模式的核心思想就是将常用对象缓存起来,在使用的时候直接拿来用,不需要创建新的对象,节省创建对象消耗的资源,节省GC回收这些对象时消耗的资源。例如Integer类,JDBC的连接池就是享元模式思想。 下面以餐馆为场景模拟,将菜单与收钱码这种常用的对象缓存起来,面条得每次新鲜出锅不能重复吃哈,就新建对象😁。 新建一个Stuff接口 public interface Stuff { String name ( ) ; } 新建菜单类 public class Menu implements Stuff { public String name ( ) { return "菜单" ; } } 新建收款码类 public class CollectionCode implements Stuff { public String name ( ) { return "收款码" ; } } 新建面条类 public class Noodle implements Stuff { public String name ( ) { return "面条" ; } } 新建餐馆类,将菜单和收款码对象缓存起来,面条就不缓存 import java . util . ArrayList ; import java . util . List ; public class Restaurant {

享元模式

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

设计模式学习 - 享元模式

馋奶兔 提交于 2019-12-09 14:03:04
如果一个系统在运行时所创建的相同或相似对象数量太多,将导致运行代价过高,带来的系统资源浪费、性能下降等问题。享元模式以共享的方式高效地支持大量细粒度对象的重用,享元对象能做到共享的关键是区分了内部状态和外部状态。 内部状态 内部状态是存储在享元对象内部并且不会随环境改变而改变的状态,内部可以是共享。例如字符的内容不会随外部环境变化而变化,无论在任何环境下字符‘a’始终是'a',不会变成'b'。 外部状态 外部状态是随环境改变而改变的、不可以共享的状态。享元对象的外部状态通常由客户端保存,并在襄垣对象被创建之后需要使用的时候再传入到享元对象内部。一个外部状态和另一个外部状态之间是独立的。例如字符'a'的颜色在不同地方可以有不同颜色,也可以有不同的大小。字符的颜色和大小是两个独立的外部状态,可以独立变化,互不影响。 定义 运用享元技术有效地支持大量细粒度对象的复用。 结构 Flyweight(抽象享元类) 通常是一个接口或抽象类,声明了具体享元公共的方法,这些方法可以向外界提供享元对象内部数据(内部状态),同时也可以通过这些方法设置外部数据(外部状态)。 ConcreteFlyweight(具体享元类) 实现了抽象享元类,其实例称为享元对象。在具体享元类中为内部状态提供了存储空间。通常可以结合单例模式来设计具体享元类,为每个具体享元类提供唯一的享元对象。

设计模式——享元模式

回眸只為那壹抹淺笑 提交于 2019-12-08 10:37:33
一、什么是享元模式   说到享元模式,第一个想到的应该就是池技术了,String常量池、数据库连接池、缓冲池等等都是享元模式的应用,所以说享元模式是池技术的重要实现方式。   比如我们每次创建字符串对象时,都需要创建一个新的字符串对象的话,内存开销会很大,所以如果第一次创建了字符串对象“adam“,下次再创建相同的字符串”adam“时,只是把它的引用指向”adam“,这样就实现了”adam“字符串再内存中的共享。   举个最简单的例子,网络联机下棋的时候,一台服务器连接了多个客户端(玩家),如果我们每个棋子都要创建对象,那一盘棋可能就有上百个对象产生,玩家多点的话,因为内存空间有限,一台服务器就难以支持了,所以这里要使用享元模式,将棋子对象减少到几个实例。下面给出享元模式的定义。    享元模式(Flyweight) ,运用共享技术有效地支持大量细粒度的对象。UML结构图如下:   其中,Flyweight是抽象享元角色。它是产品的抽象类,同时定义出对象的外部状态和内部状态(外部状态及内部状态相关内容见后方)的接口或实现;ConcreteFlyweight是具体享元角色,是具体的产品类,实现抽象角色定义的业务;UnsharedConcreteFlyweight是不可共享的享元角色,一般不会出现在享元工厂中;FlyweightFactory是享元工厂,它用于构造一个池容器

享元模式

时间秒杀一切 提交于 2019-12-06 13:49:03
享元模式 享元模式(Flyweight Pattern):也叫蝇量模式,运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种对象结构型模式 享元类的设计是享元模式的要点之一,在享元类中要将内部状态和外部状态分开处理,通常将内部状态作为享元类的成员变量,而外部状态通过注入的方式添加到享元类中 享元模式常用于系统底层开发,解决系统的性能问题。像数据库连接池,里面都是创建好的连接对象,在这些连接对象中有我们需要的则直接拿来用,避免重新创建,如果没有我们需要的,则创建一个 享元模式能够解决重复对象的内存浪费的问题,当系统中有大量相似对象,需要缓冲池时。不需总是创建新对象,可以从缓冲池里拿。这样可以降低系统内存,同时提高效率 享元模式经典的应用场景就是池技术了,String 常量池、数据库连接池、缓冲池等等都是享元模式的应用,享元模式是池技术的重要实现方式 Flyweight(抽象享元类):通常是一个接口或抽象类,在抽象享元类中声明了具体享元类公共的方法,这些方法可以向外界提供享元对象的内部数据(内部状态),同时也可以通过这些方法来设置外部数据(外部状态)。 ConcreteFlyweight(具体享元类):它实现了抽象享元类

享元模式--设计模式

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

设计模式之Memento(备忘机制)

无人久伴 提交于 2019-12-05 20:35:16
1、创建型模式 JDK1.5枚举Singleton 单例模式 AbstractFactory 工厂方法模式 简单工厂模式 Builder Prototype 2、结构型 java设计模式—Adapter模式 从Decorator,Adapter模式看Java的IO库 Bridge Composite Decorator 外观模式 Facade Pattern 享元模式 Flyweight Pattern 代理模式 3、行为型 职责链模式 Chain of Responsibility Pattern Java之命令模式(Command Pattern) Iterator ( JAVA迭代器与迭代模式 ) 调停者模式(Mediator) 设计模式之Memento(备忘机制) Observer State Strategy Visitor 原文作者: duanxz 原文地址:https://www.cnblogs.com/duanxz/p/3633475.html 来源: https://www.cnblogs.com/wjqhuaxia/p/11945718.html

设计模式

谁都会走 提交于 2019-12-05 18:08:48
目录 一、创建型模式 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

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

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

享元模式

半世苍凉 提交于 2019-12-05 11:07:09
展示网站项目需求 小型的外包项目,给客户A做一个产品展示网站,客户A的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求都有些不同: 1、有客户要求以新闻的形式发布; 2、有客户人要求以博客的形式发布; 3、有客户希望以微信公众号的形式发布。 传统方案 1、直接复制粘贴一份,然后根据客户不同要求,进行定制修改; 2、给每个网站租用一个空间。 方案设计示意图: 传统方案解决网站展示项目的问题分析: 1、需要的网站结构相似度很高,而且都不是高访问量网站,如果分成多个虚拟空间来处理,相当于一个相同网站的实例对象很多 , 造成服务器的资源浪费 ; 2、解决思路:整合到一个网站中,共享其相关的代码和数据,对于硬盘、内存、CPU、数据库空间等服务器资源都可以达成共享,减少服务器资源; 3、对于代码来说,由于是一份实例,维护和扩展都更加容易,可以使用享元模式来解决。 享元模式 基本介绍 1、享元模式(Flyweight Pattern)也叫蝇量模式:运用共享技术有效地支持大量细粒度的对象; 2、常用于系统底层开发,解决系统的性能问题。像数据库连接池,里面都是创建好的连接对象,在这些连接对象中有我们需要的则直接拿来用,避免重新创建,如果没有我们需要的,则创建一个; 3、享元模式能够解决 重复对象的内存浪费的问题 ,当系统中有大量相似对象,需要缓冲池时。不需总是创建新对象,可以从缓冲池里拿