设计模式之享元模式

享元模式主要是为了减少创建对象的数量以减少内存占用和性能提供

在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。

使用常见;需要缓冲池

1)声明一个形状接口

/**
 * 享元模式下声明形状接口
 * @author Administrator
 *
 */
public interface Shape {
    //定义一个drow方法
    public void drow();
}
View Code

2)创建实现接口的实体类

package cn.ac.bcc.flyweightpattern.impl;

import cn.ac.bcc.flyweightpattern.Shape;
/**
 * 定义圆类实现形状接口
 * @author Administrator
 */
public class Circle implements Shape {

    private String color;//颜色
    private int x;  //横坐标
    private int y;  //纵坐标
    private int radius; //半径
    
    
    public String getColor() {
        return color;
    }


    public void setColor(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 int getRadius() {
        return radius;
    }


    public void setRadius(int radius) {
        this.radius = radius;
    }


    @Override
    public void drow() {
        
        System.out.println("我是一个圆");

    }

}
View Code

3)创建一个工厂,生成基于给定信息的实体类的对象

package cn.ac.bcc.flyweightpattern;

import java.util.HashMap;

import cn.ac.bcc.flyweightpattern.impl.Circle;

/**
 *  用来创建形状类
 * @author Administrator
 *
 */
public class ShapeFactory {
    //存储已存在实例
    private static final HashMap map = new HashMap<String,Circle>();
    
    public static Shape getShape(String color){
             //根据颜色获取指定颜色的实例
             Circle circle =(Circle) map.get(color);
             //如果不存在指定颜色的实例  创建并新增到map中
             if(circle==null){
                 circle = new Circle();
                 map.put(color, circle);
                 System.out.println("创建一个"+color+"的圆");
             }
             return circle;
    }
}
View Code

4)使用该工厂,通过传递颜色信息来获取实体类的对象

import java.util.HashMap;

import cn.ac.bcc.flyweightpattern.impl.Circle;

/**
 *  用来创建形状类
 * @author Administrator
 *
 */
public class ShapeFactory {
    //存储已存在实例
    private static final HashMap map = new HashMap<String,Circle>();
    
    public static Shape getShape(String color){
             //根据颜色获取指定颜色的实例
             Circle circle =(Circle) map.get(color);
             //如果不存在指定颜色的实例  创建并新增到map中
             if(circle==null){
                 circle = new Circle();
                 map.put(color, circle);
                 System.out.println("创建一个"+color+"的圆");
             }
             return circle;
    }
}
View Code
原文地址:https://www.cnblogs.com/lwdmaib/p/9279857.html