享元模式 悠悠 2022-05-31 09:49 182阅读 0赞 ## 1.使用场景: ## 内存资源比较稀缺,不要随便浪费,如果有很多相同或者类似的对象,通过使用享元模式的方法,节省内存,例如线程池以及String类等。 ## 2.UML表示 ## 在享元模式中通常用以下的几类对象: 2.1FlyweightFactory(享元工厂,创建并且管理享元对象) 2.2FlyWeight享元抽象类 2.3ConcreteFlyWeight具体享元类 2.4UnsharedConcreteFlyWeight非共享享元类 具体的UML示意图如下: ![20180219163824711][] ## 3.代码实现 ## 首先,定义一个接口: public interface ChessFlyWeight { void setColor(); String getColor(); void display(Coordinate coordinate); } 定义棋子类: public class ConcreteChess implements ChessFlyWeight { private String color; public ConcreteChess(String color) { this.color = color; } @Override public void setColor() { this.color=color; } @Override public String getColor() { return color; } @Override public void display(Coordinate coordinate) { System.out.println("棋子颜色:"+color); System.out.println("棋子位置:"+coordinate.getX()+"-----"+coordinate.getY()); } } 再定义坐标类: public class Coordinate { private int x,y; public Coordinate(int x, int y) { 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; } } 然后是我们的享元工厂: public class ChessWeightFactory { private static Map<String,ChessFlyWeight> map=new HashMap<>(); public static ChessFlyWeight getChess(String color){ if (map.get(color)!=null){ return map.get(color); } else{ ChessFlyWeight chessFlyWeight=new ConcreteChess(color); map.put(color,chessFlyWeight); return chessFlyWeight; } } } 最后,给出一个简单的测试程序: public class Client { public static void main(String[] args) { ChessFlyWeight chessFlyWeight1= ChessWeightFactory.getChess("黑色"); ChessFlyWeight chessFlyWeight2= ChessWeightFactory.getChess("黑色"); System.out.println(chessFlyWeight1.equals(chessFlyWeight2)); System.out.println("增加外部状态的处理"); chessFlyWeight1.display(new Coordinate(0,0)); chessFlyWeight2.display(new Coordinate(10,0)); } } ## 4.总结 ## 享元模式以共享的方式高效的支持大量细粒度对象的重用。共享的关键是使用了内部状态以及外部状态,其中: 内部状态指的是可以共享,不会随着环的变化而变化的属性;而外部状态指的是不可以共享,会随着环境变化而变化的属性。对于外部状态,使用外部类来进行处理,而对于内部状态,我们单独通过享元类来进行处理。 下面给出项目的链接: [https://github.com/][https_github.com][memoryexplosion][][/design\_pattern\_review/tree/master/src/java/facade][https_github.com] [20180219163824711]: /images/20220531/4959cd52706e488fbfee6927666005ae.png [https_github.com]: https://github.com/saiJPlus/design_pattern_review/tree/master/src/java/facade [memoryexplosion]: https://memoryexplosion.github.io/
相关 享元模式 享元模式定义 英文定义: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 赞/ 183 阅读
相关 享元模式 定义 享元模式:运用共享技术有效的支持大量细粒度的对象。 面向对象技术可以很好地解决一些灵活性或可扩展性问题,但在很多情况下需要在系统中增加类和对象的个数。当对象数量太 向右看齐/ 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 赞/ 248 阅读
相关 享元模式 当系统中出现大量相同、相似的对象时,会导致系统性能下降。享元模式通过共享技术对相同或相似对象进行重用,从而解决这一问题。在享元模式中,存储共享实例对象的地方称为享元池 (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 阅读
还没有评论,来说两句吧...