定义:它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件。
特点:大大减少对象的创建,降低系统的内存,使效率提高。
企业级开发及常用框架中的应用:数据库的连接池,String的常量缓存池
具体代码实例:
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class Demo {
public static void main(String[] args) {
for(int i = 0 ; i < 10 ; i++){
Circle circle = new Circle(getColor());
circle.setRadius(getRadius());
circle.setX(getZ());
circle.setY(getZ());
circle.draw();
}
}
public static String getColor(){
String[] colors = {"红色","橙色","黄色","青色","绿色"};
Random random = new Random();
int index = random.nextInt(4);
return colors[index];
}
public static double getRadius(){
Random random = new Random();
return random.nextDouble()*20;
}
public static int getZ(){
Random random = new Random();
return random.nextInt(100);
}
}
interface Shape{
public void draw();
}
class Circle implements Shape{
private int x;
private int y;
private double radius;
private String color;
public Circle(String color) {
this.color = color;
}
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 double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public void draw() {
System.out.println("画了一个圆心坐标为:("+this.x+","+this.y+"),半径为"+this.radius+","+this.color+"的圆");
}
}
class CircleFactory{
private static Map map = new HashMap<>();
public static Circle getCircle(String color){
Circle c = map.get(color);
if(c == null){
c = new Circle(color);
map.put(color, c);
return c;
}
return c;
}
}
享元模式主要为了解决大量类似对象占用大量内存的现象,因为内存是珍贵的资源,所以我们讲这些相似对象进行归类,提取出相同部分用以共享,这样可以非常明显的节省内存开销,但要记住一个前提,在节省内存的同时,我们是加大了代码运行时间为前提的,所以,有的时候我们需要平衡时间和内存开销。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



