zoukankan      html  css  js  c++  java
  • 设计模式之享元模式

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

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

    使用常见;需要缓冲池

    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
  • 相关阅读:
    安全工具-Arachni
    Python读取本地文档内容并发送邮件
    Linux好用的工具命令
    kali 安装google chrome浏览器(离线手动)
    安全工具-Sparta
    安全工具-Hydra
    当年的程序员,如今已是父母,七个方法让孩子爱上学习!
    一个网站SEO优化方案
    发现2017年最好的CSS框架
    怎么样加快JavaScript加载和执行效率
  • 原文地址:https://www.cnblogs.com/lwdmaib/p/9279857.html
Copyright © 2011-2022 走看看