享元模式 忘是亡心i 2022-04-18 04:55 195阅读 0赞 ## 享元模式 ## ## 一、概述 ## 1. 内存属于稀缺资源,不要随便浪费。如果有很多个完全相同或相似的 对象,我们可以通过享元模式,节省内存。 2. 享元模式以共享的方式高效地支持大量细粒度对象的重用。 3. 享元对象能做到共享的关键是区分了内部状态和外部状态。 * 内部状态:可以共享,不会随环境变化而改变 * 外部状态:不可以共享,会随环境变化而改变 4. 应用场景 围棋软件设计,每个围棋棋子都是一个对象, 有颜色、形状、大小等属性是可以共享的,称之为**内部状态**。比如位置属性不可以共享,可以称之为**外部状态** 5. 享元模式构成 * FlyweightFactory享元工厂类:创建并管理享元对象,享元池一般设计成键值对 * FlyWeight抽象享元类 :通常是一个接口或抽象类,声明公共方法,这些方法可以向外界提供对象的内部状态,设置外部状态。 * ConcreteFlyWeight具体享元类 :为内部状态提供成员变量进行存储 * UnsharedConcreteFlyWeight非共享享元类 :不能被共享的子类可以设计为非共享享元类 ## 二、代码围棋 ## 1. 享元接口 public interface ChessFlyWeight { void setColor(String c); String getColor(); void display(Coordinate c); } 2. 具体享元类 class ConcreteChess implements ChessFlyWeight { private String color; public ConcreteChess(String color) { super(); this.color = color; } @Override public void display(Coordinate c) { System.out.println("棋子颜色:"+color); System.out.println("棋子位置:"+c.getX()+"----"+c.getY()); } @Override public String getColor() { return color; } @Override public void setColor(String c) { this.color = c; } } 3. 非共享元类 public class Coordinate { private int x,y; public Coordinate(int x, int y) { super(); this.x = x; this.y = y; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } } 4. 享元工厂 public class ChessFlyWeightFactory { //享元池 private static Map<String,ChessFlyWeight> map = new HashMap<String, ChessFlyWeight>(); public static ChessFlyWeight getChess(String color){ if(map.get(color)!=null){ return map.get(color); }else{ ChessFlyWeight cfw = new ConcreteChess(color); map.put(color, cfw); return cfw; } } } 5. 测试类 public class Client { public static void main(String[] args) { ChessFlyWeight chess1 = ChessFlyWeightFactory.getChess("黑色"); ChessFlyWeight chess2 = ChessFlyWeightFactory.getChess("黑色"); System.out.println(chess1); System.out.println(chess2); System.out.println("增加外部状态的处理==========="); chess1.display(new Coordinate(10, 10)); chess2.display(new Coordinate(20, 20)); } } ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2tpbmdfY2Fubm9uX2ZvZGRlcg_size_16_color_FFFFFF_t_70] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2tpbmdfY2Fubm9uX2ZvZGRlcg_size_16_color_FFFFFF_t_70]: /images/20220418/dee288166ec644caa9ac68ff60073acb.png
相关 享元模式 享元模式定义 英文定义:A flyweight is an object that minimizes memory use by sharing as much data 短命女/ 2022年08月02日 14:43/ 0 赞/ 31 阅读
相关 享元模式 享元模式(Flyweight),就是运用共享技术有效地支持大量细粒度的对象。 享元对象能做到共享的关键是区分内部状态(Internal State)和外部状态(Externa 冷不防/ 2022年06月16日 23:20/ 0 赞/ 196 阅读
相关 享元模式 1.使用场景: 内存资源比较稀缺,不要随便浪费,如果有很多相同或者类似的对象,通过使用享元模式的方法,节省内存,例如线程池以及String类等。 2.UML表示 悠悠/ 2022年05月31日 09:49/ 0 赞/ 182 阅读
相关 享元模式 定义 享元模式:运用共享技术有效的支持大量细粒度的对象。 面向对象技术可以很好地解决一些灵活性或可扩展性问题,但在很多情况下需要在系统中增加类和对象的个数。当对象数量太 向右看齐/ 2022年05月14日 12:15/ 0 赞/ 29 阅读
相关 享元模式 享元模式 一、概述 1. 内存属于稀缺资源,不要随便浪费。如果有很多个完全相同或相似的 对象,我们可以通过享元模式,节省内存。 2. 享元模式以共享的方式高效地 忘是亡心i/ 2022年04月18日 04:55/ 0 赞/ 196 阅读
相关 享元模式 前言 享元模式(Flyweight),运用共享技术有效地支持大量细粒度的对象。 一、网站抽象类 1 public abstract c 墨蓝/ 2021年12月09日 00:53/ 0 赞/ 152 阅读
相关 享元模式 [享元模式][Link 1] 模式说明 所谓享元模式就是运行共享技术有效地支持大量细粒度对象的复用。系统使用少量对象,而且这些都比较相似,状态变化小,可以实现 ゝ一世哀愁。/ 2021年11月23日 06:46/ 0 赞/ 247 阅读
相关 享元模式 当系统中出现大量相同、相似的对象时,会导致系统性能下降。享元模式通过共享技术对相同或相似对象进行重用,从而解决这一问题。在享元模式中,存储共享实例对象的地方称为享元池 (Fly 怼烎@/ 2021年11月11日 10:50/ 0 赞/ 295 阅读
相关 享元模式 12.享元模式 我们可以共用一个 Hello world 对象,其中字符串 “Hello world” 为内部状态,可共享;字体颜色为外部状态,不可共享,由 逃离我推掉我的手/ 2021年09月17日 00:00/ 0 赞/ 286 阅读
相关 享元模式 元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的... 小灰灰/ 2020年06月13日 05:55/ 0 赞/ 455 阅读
还没有评论,来说两句吧...