Java设计模式(十)--享元模式

享元模式通过缓存复用对象来减少内存使用和提高性能。代码示例中展示了如何使用享元模式创建抽象形状接口,具体圆形类,以及享元工厂类来管理共享的圆形对象。测试部分显示了从工厂获取或创建颜色随机的圆,并进行绘制,从而避免频繁创建新的对象。
摘要由CSDN通过智能技术生成

简介

享元模式用于减少对象创建的数量,以及减少内存的占用并提高系统的性能,尝试复用现有的对象。

抽象享元类

 public interface Shape {
    void draw();
 }

具体享元类

 @Data
 public class Circle implements Shape {
    private String color;
    private int x;
    private int y;
    private int radius;
  
    public Circle(String color){
       this.color = color;     
    }
    
    @Override
    public void draw() {
       System.out.println("Circle: Draw() [Color : " + color 
          +", x : " + x +", y :" + y +", radius :" + radius);
    }
 }

享元工厂类

public class ShapeFactory {
    private static final HashMap<String, 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;
    }
 }

测试

 public class FlyweightPatternDemo {
    private static final String colors[] = 
       { "Red", "Green", "Blue", "White", "Black" };
    public static void main(String[] args) {
  
       for(int i=0; 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);
    }
 }

从代码中能看出将需要重复使用的对象存放在缓存中,需要使用对象的时候只需要从缓存中获取,而不需要重新创建,减少了内存使用空间。

总结

享元模式减少了对象的创建,像线程池这些都属于享元模式,在外观模式下是将方法抽成一个公共的方法,而享元模式则是将对象抽成一个公共的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值