平昌县住房和城乡建设局网站百度竞价排名是什么
平昌县住房和城乡建设局网站,百度竞价排名是什么,我为什么电商要学网站建设,一个企业做网站的意义Java享元模式 摘要实现范例 享元模式#xff08;Flyweight Pattern#xff09;主要用于减少创建对象的数量#xff0c;以减少内存占用和提高性能 享元模式尝试重用现有的同类对象#xff0c;如果未找到匹配的对象#xff0c;则创建新对象
享元模式属于结构型模式… Java享元模式 摘要实现范例 享元模式Flyweight Pattern主要用于减少创建对象的数量以减少内存占用和提高性能 享元模式尝试重用现有的同类对象如果未找到匹配的对象则创建新对象
享元模式属于结构型模式它提供了减少对象数量从而改善应用所需的对象结构的方式
摘要
1. 意图
运用共享技术有效地支持大量细粒度的对象2. 主要解决
在有大量对象时有可能会造成内存溢出我们把其中共同的部分抽象出来如果有相同的业务请求
直接返回在内存中已有的对象避免重新创建3. 何时使用
系统中有大量对象这些对象消耗大量内存这些对象的状态大部分可以外部化这些对象可以按照内蕴状态分为很多组当把外蕴对象从对象中剔除出来时每一组对象都可以用一个对象来代替系统不依赖于这些对象身份这些对象是不可分辨的
4. 如何解决
用唯一标识码判断如果在内存中有则返回这个唯一标识码所标识的对象
5. 关键代码
用HashMap 存储这些对象
6. 应用实例
JAVA中的String如果有则返回如果没有则创建一个字符串保存在字符串缓存池里面数据库的数据池
7. 优点
大大减少对象的创建降低系统的内存使效率提高
8. 缺点
提高了系统的复杂度需要分离出外部状态和内部状态而且外部状态具有固有化的性质不应该随着内部状态的变化而变化否则会造成系统的混乱
9. 使用场景
系统有大量相似对象需要缓冲池的场景
10. 注意事项
注意划分外部状态和内部状态否则可能会引起线程安全问题这些类必须有一个工厂对象加以控制
实现 定义一个Shape接口和实现了Shape接口的实体类Circle定义工厂类ShapeFactory
*ShapeFactory* 有一个 *Circle* 的 *HashMap* 其中键名为 *Circle* 对象的颜色无论何时接收到请求都会创建一个特定颜色的圆*ShapeFactory* 检查它的 *HashMap* 中的 circle 对象如果找到 *Circle* 对象则返回该对象
否则将创建一个存储在 hashmap 中以备后续使用的新对象并把该对象返回到客户端定义类FlyWeightPatternDemo使用ShapeFactory来获取Shape对象
它将向 *ShapeFactory* 传递信息 *red / green / blue/ black / white*
以便获取它所需对象的颜色范例
我们将通过创建 5 个对象来画出 20 个分布于不同位置的圆来演示这种模式 由于只有 5 种可用的颜色所以 color 属性被用来检查现有的 Circle 对象
1.创建一个接口.
Shape.java
package com.demo.gof;
public interface Shape {void draw();
}2. 创建实现接口的实体类
Circle.java
package com.demo.gof;
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;}Overridepublic void draw() {System.out.println(Circle: Draw() [Color : color , x : x , y : y , radius : radius);}
}3. 创建一个工厂生成基于给定信息的实体类的对象
ShapeFactory.java
package com.demo.gof;
import java.util.HashMap;public class ShapeFactory {private static final HashMapString, 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;}4. 使用该工厂通过传递颜色信息来获取实体类的对象
FlyweightPatternDemo.java
package com.demo.gof;
public class FlyweightPatternDemo {private static final String colors[] { Red, Green, Blue, White, Black };public static void main(String[] args) {for(int i0; 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);}
}编译运行以上 Java 范例输出结果如下
$ javac -d . src/main/com.demo/gof/FlyweightPatternDemo.java
$ java com.ddkk.gof.FlyweightPatternDemo
Creating circle of color : Black
Circle: Draw() [Color : Black, x : 36, y :71, radius :100
Creating circle of color : Green
Circle: Draw() [Color : Green, x : 27, y :27, radius :100
Creating circle of color : White
Circle: Draw() [Color : White, x : 64, y :10, radius :100
Creating circle of color : Red
Circle: Draw() [Color : Red, x : 15, y :44, radius :100
Circle: Draw() [Color : Green, x : 19, y :10, radius :100
Circle: Draw() [Color : Green, x : 94, y :32, radius :100
Circle: Draw() [Color : White, x : 69, y :98, radius :100
Creating circle of color : Blue
Circle: Draw() [Color : Blue, x : 13, y :4, radius :100
Circle: Draw() [Color : Green, x : 21, y :21, radius :100
Circle: Draw() [Color : Blue, x : 55, y :86, radius :100
Circle: Draw() [Color : White, x : 90, y :70, radius :100
Circle: Draw() [Color : Green, x : 78, y :3, radius :100
Circle: Draw() [Color : Green, x : 64, y :89, radius :100
Circle: Draw() [Color : Blue, x : 3, y :91, radius :100
Circle: Draw() [Color : Blue, x : 62, y :82, radius :100
Circle: Draw() [Color : Green, x : 97, y :61, radius :100
Circle: Draw() [Color : Green, x : 86, y :12, radius :100
Circle: Draw() [Color : Green, x : 38, y :93, radius :100
Circle: Draw() [Color : Red, x : 76, y :82, radius :100
Circle: Draw() [Color : Blue, x : 95, y :82, radius :100
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/88725.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!