享元模式 | Flyweight Pattern
来源:互联网 发布:恶魔的奶爸 知乎专栏 编辑:程序博客网 时间:2024/05/29 12:53
享元模式使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。
结构:
(1) 抽象享元角色:为具体享元角色规定了必须实现的方法,而外蕴状态就是以参数的形式通过此方法传入。在Java中可以由抽象类、接口来担当。
(2) 具体享元角色:实现抽象角色规定的方法。如果存在内蕴状态,就负责为内蕴状态提供存储空间。
(3) 享元工厂角色:负责创建和管理享元角色。要想达到共享的目的,这个角色的实现是关键!
(4) 客户端角色:维护对所有享元对象的引用,而且还需要存储对应的外蕴状态。
创建一个接口:
public interface Shape { void draw();}
创建实现接口的实体类:
public class Circle implements Shape { private String color; private int x; private int y; private int radius; public Circle(String color){ this.color = color; } public void setX(int x) { this.x = x; } public void setY(int y) { this.y = y; } public void setRadius(int radius) { this.radius = radius; } @Override public void draw() { System.out.println("Circle: Draw() [Color : " + color +", x : " + x +", y :" + y +", radius :" + radius); }}
创建一个工厂,生成基于给定信息的实体类的对象:
import java.util.HashMap;public class ShapeFactory { private static final HashMap<String, Shape> circleMap = new HashMap(); public static Shape getCircle(String color) { Circle circle = (Circle)circleMap.get(color); if(circle == null) { circle = new Circle(color); circleMap.put(color, circle); System.out.println("Creating circle of color : " + color); } return circle; }}
使用该工厂,通过传递颜色信息来获取实体类的对象:
public class FlyweightPatternDemo { private static final String colors[] = { "Red", "Green", "Blue", "White", "Black" }; public static void main(String[] args) { for(int i=0; i < 20; ++i) { Circle circle = (Circle)ShapeFactory.getCircle(getRandomColor()); circle.setX(getRandomX()); circle.setY(getRandomY()); circle.setRadius(100); circle.draw(); } } private static String getRandomColor() { return colors[(int)(Math.random()*colors.length)]; } private static int getRandomX() { return (int)(Math.random()*100 ); } private static int getRandomY() { return (int)(Math.random()*100); }}
阅读全文
0 0
- 享元模式(Flyweight Pattern)
- 享元模式(Flyweight Pattern)
- 享元模式(Flyweight pattern)
- 享元模式 Flyweight Pattern
- 享元模式(Flyweight Pattern)
- 享元模式(Flyweight Pattern)
- 享元模式(Flyweight Pattern)
- 享元模式( Flyweight Pattern)
- flyweight pattern -- 享元模式
- 享元模式(Flyweight Pattern)
- 享元模式(Flyweight Pattern)
- 享元模式 Flyweight Pattern
- 享元模式 | Flyweight Pattern
- 享元模式(Flyweight Pattern)
- 享元模式(Flyweight Pattern)
- 设计模式【享元模式Flyweight Pattern】
- 享元模式(Flyweight Pattern)
- 享元模式(Flyweight Pattern)
- 计算机硬件系统基础知识板书
- hdu1207(汉诺塔II)
- 合理的估算线程池的大小
- JIT(just-in-time) 即时编译
- 把ImageView转换为位图
- 享元模式 | Flyweight Pattern
- 用swaks进行发件人伪造
- java 构造方法与静态方法
- jQuery节点创建与属性的处理
- 博客搬家了
- 从零开始使用TensorFlow可视化工具Tensorboard
- (2)语法2:数组、函数、函数一些细节、匿名函数、动态函数
- 三维重建面试15:动态相机参数标定
- 求{1,2,3}的子集————回溯法(递归与非递归)