2021中文字幕入口网站,做网站主机选择,北京代做网站,google移动网站建站十大原则主要用于减少创建对象的数量#xff0c;以减少内存占用和提高性能。这种类型的设计模式属于结构型模式#xff0c;它提供了减少对象数量从而改善应用所需的对象结构的方式。
享元模式尝试重用现有的同类对象#xff0c;如果未找到匹配的对象#xff0c;则创建新对象。我们…主要用于减少创建对象的数量以减少内存占用和提高性能。这种类型的设计模式属于结构型模式它提供了减少对象数量从而改善应用所需的对象结构的方式。
享元模式尝试重用现有的同类对象如果未找到匹配的对象则创建新对象。我们将通过创建 5 个对象来画出 20 个分布于不同位置的圆来演示这种模式。由于只有 5 种可用的颜色所以 color 属性被用来检查现有的 Circle 对象。 意图运用共享技术有效地支持大量细粒度的对象。
主要解决在有大量对象时有可能会造成内存溢出我们把其中共同的部分抽象出来如果有相同的业务请求直接返回在内存中已有的对象避免重新创建。
何时使用 1、系统中有大量对象。 2、这些对象消耗大量内存。 3、这些对象的状态大部分可以外部化。 4、这些对象可以按照内蕴状态分为很多组当把外蕴对象从对象中剔除出来时每一组对象都可以用一个对象来代替。 5、系统不依赖于这些对象身份这些对象是不可分辨的。
如何解决用唯一标识码判断如果在内存中有则返回这个唯一标识码所标识的对象。
关键代码用 HashMap 存储这些对象。
应用实例 1、JAVA 中的 String如果有则返回如果没有则创建一个字符串保存在字符串缓存池里面。 2、数据库的连接池。
优点大大减少对象的创建降低系统的内存使效率提高。
缺点提高了系统的复杂度需要分离出外部状态和内部状态而且外部状态具有固有化的性质不应该随着内部状态的变化而变化否则会造成系统的混乱。
使用场景 1、系统有大量相似对象。 2、需要缓冲池的场景。
注意事项 1、注意划分外部状态和内部状态否则可能会引起线程安全问题。 2、这些类必须有一个工厂对象加以控制。
public interface Shape {void draw();
}
Data
public class Circle implements Shape {private String color;private int x;private int y;private int radius;public Circle(String color){this.color color;}Overridepublic void draw() {System.out.println(this is Circle.draw);System.out.println(xx----yy----radiusradius);}
}
public class ShapeFactory {private static final HashMapString, Object circleMap new HashMap();public static Object getCircle(String color){Circle circle (Circle) circleMap.get(color);if (BeanUtil.isEmpty(circle)){circle new Circle(color);circleMap.put(color, circle);System.out.println(Creating circle of color : color);}return circle;}
} private static final String colors[] { Red, Green, Blue, White, Black };Testpublic void test7(){for(int i0; i 5; 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);}
/*Creating circle of color : Green
this is Circle.draw
x28----y49----radius100
Creating circle of color : Blue
this is Circle.draw
x79----y8----radius100
Creating circle of color : White
this is Circle.draw
x77----y12----radius100
this is Circle.draw
x16----y57----radius100
this is Circle.draw
x66----y16----radius100*/