码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式之享元模式

时间:2018-07-08 14:45:22      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:oid   直接   占用   final   import   创建对象   span   缓冲池   tco   

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

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

使用常见;需要缓冲池

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

 

设计模式之享元模式

标签:oid   直接   占用   final   import   创建对象   span   缓冲池   tco   

原文地址:https://www.cnblogs.com/lwdmaib/p/9279857.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!