定义:
运用共享技术来有効地支持大量细粒度对象的复用。它通过共享已经存在的又橡来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。
特点:
相同对象只要保存一份,这降低了系统中对象的数量,从而降低了系统中细粒度对象给内存带来的压力。(优点)
- 为了使对象可以共享,需要将一些不能共享的状态外部化,这将增加程序的复杂性。(缺点)
-
通常适用场景:
系统中存在大量相同或相似的对象,这些对象耗费大量的内存资源。
大部分的对象可以按照内部状态进行分组,且可将不同部分外部化,这样每一个组只需保存一个内部状态。
demo代码:
享元 ```java //抽象享元类 public interface Car { void make(int count); }
//具体享元类 public class FruitCar implements Car {
private String carType;public FruitCar(String carType){this.carType=carType;System.out.println(carType + "车被创建");}@Overridepublic void make(int count) {System.out.println(carType + "车被使用"+count+"次");}
}
//享元工厂类 public class FruitCarFactory{
private Map<String,Car> fruitCarMap= new ConcurrentHashMap<>();
public Car createFruitCar(String carType){
Car car = fruitCarMap.get(carType);
if(car ==null){
car=new FruitCar(carType);
fruitCarMap.put(carType,car);
}else {
System.out.println("已存在"+ carType+"车,成功获取");
}
return car;
}
}
- 测试和结果
```java
public static void main(String[] args) {
FruitCarFactory fruitCarFactory =new FruitCarFactory();
Car a1 = fruitCarFactory.createFruitCar("A类");
a1.make(1);
Car a2 = fruitCarFactory.createFruitCar("A类");
a2.make(2);
Car a3 = fruitCarFactory.createFruitCar("A类");
a3.make(3);
Car b1 = fruitCarFactory.createFruitCar("B类");
b1.make(1);
Car b2 = fruitCarFactory.createFruitCar("B类");
b2.make(2);
}

